#include #include #include #include #include #include #include OwnerDrawList::OwnerDrawList(GUIWindow &parentWnd,HWND hControlWnd,UINT controlID) : mParentWnd(parentWnd), Control(hControlWnd,controlID), mDlgWidthUnits((LOWORD(::GetDialogBaseUnits())/4)*2) { mDrawItemHandler.setCallback(this,&OwnerDrawList::drawItemHandler); mMeasureItemHandler.setCallback(this,&OwnerDrawList::measureItemHandler); mControlColorHandler.setCallback(this,&OwnerDrawList::controlColorHandler); mSizeHandler.setCallback(this,&OwnerDrawList::sizeHandler); mParentWnd.insertHandler(VectorHandler::DrawItemHandler,&mDrawItemHandler); mParentWnd.insertHandler(VectorHandler::MeasureItemHandler,&mMeasureItemHandler); mParentWnd.insertHandler(VectorHandler::ControlColorHandler,&mControlColorHandler); mParentWnd.insertHandler(VectorHandler::SizeHandler,&mSizeHandler); } OwnerDrawList::OwnerDrawList(GUIWindow &parentWnd,const Rect &initRect,UINT controlID,DWORD style) : mParentWnd(parentWnd), mDlgWidthUnits((LOWORD(::GetDialogBaseUnits())/4)*2) { mDrawItemHandler.setCallback(this,&OwnerDrawList::drawItemHandler); mMeasureItemHandler.setCallback(this,&OwnerDrawList::measureItemHandler); mControlColorHandler.setCallback(this,&OwnerDrawList::controlColorHandler); mSizeHandler.setCallback(this,&OwnerDrawList::sizeHandler); mParentWnd.insertHandler(VectorHandler::DrawItemHandler,&mDrawItemHandler); mParentWnd.insertHandler(VectorHandler::MeasureItemHandler,&mMeasureItemHandler); mParentWnd.insertHandler(VectorHandler::ControlColorHandler,&mControlColorHandler); mParentWnd.insertHandler(VectorHandler::SizeHandler,&mSizeHandler); createControl("LISTBOX","",style,initRect,parentWnd,controlID); } OwnerDrawList::~OwnerDrawList() { mParentWnd.removeHandler(VectorHandler::DrawItemHandler,&mDrawItemHandler); mParentWnd.removeHandler(VectorHandler::MeasureItemHandler,&mMeasureItemHandler); mParentWnd.removeHandler(VectorHandler::ControlColorHandler,&mControlColorHandler); mParentWnd.removeHandler(VectorHandler::SizeHandler,&mSizeHandler); } CallbackData::ReturnType OwnerDrawList::controlColorHandler(CallbackData &someCallbackData) { PureDevice pureDevice((HDC)someCallbackData.wParam()); Control wndListBox((HWND)someCallbackData.lParam(),::GetDlgCtrlID((HWND)someCallbackData.lParam()),FALSE); if(!(*this==wndListBox))return (CallbackData::ReturnType)TRUE; return handleControlColor(pureDevice,wndListBox); } CallbackData::ReturnType OwnerDrawList::drawItemHandler(CallbackData &someCallbackData) { DrawItem drawItem(*((LPDRAWITEMSTRUCT)someCallbackData.lParam())); if(drawItem.controlID()!=controlID())return (CallbackData::ReturnType)TRUE; handleDraw(drawItem); return (CallbackData::ReturnType)TRUE; } CallbackData::ReturnType OwnerDrawList::measureItemHandler(CallbackData &someCallbackData) { if(controlID()!=someCallbackData.wParam())return (CallbackData::ReturnType)TRUE; LPMEASUREITEMSTRUCT pMeasureItemStruct=(LPMEASUREITEMSTRUCT)someCallbackData.lParam(); MeasureItem measureItem(*pMeasureItemStruct); handleMeasureItem(measureItem); pMeasureItemStruct->CtlType=measureItem.ctlType(); pMeasureItemStruct->CtlID=measureItem.ctlID(); pMeasureItemStruct->itemID=measureItem.itemID(); pMeasureItemStruct->itemWidth=measureItem.itemWidth(); pMeasureItemStruct->itemHeight=measureItem.itemHeight(); pMeasureItemStruct->itemData=measureItem.itemData(); return (CallbackData::ReturnType)TRUE; } CallbackData::ReturnType OwnerDrawList::sizeHandler(CallbackData &someCallbackData) { handleResize(someCallbackData.loWord(),someCallbackData.hiWord()); return (CallbackData::ReturnType)FALSE; } BOOL OwnerDrawList::setTabStops(Block &tabStops) { if(!isOkay())return FALSE; mTabStopArray.size(tabStops.size()); if(!mTabStopArray.size())return FALSE; int *pIntArray=(int*)&mTabStopArray[0]; for(int itemIndex=0;itemIndex &selectedItems) { GlobalData selItems; LONG itemCount; if(!isOkay())return LB_ERR; selItems.size(MaxItems); itemCount=sendMessage(LB_GETSELITEMS,selItems.size(),(LPARAM)((DWORD*)&selItems[0])); if(LB_ERR==itemCount)return LB_ERR; selectedItems.size(itemCount); for(DWORD itemIndex=0;itemIndex