#ifndef _COMMON_OWNERDRAWLIST_HPP_ #define _COMMON_OWNERDRAWLIST_HPP_ #ifndef _COMMON_CONTROL_HPP_ #include #endif #ifndef _COMMON_RUBBERCONTROL_HPP_ #include #endif #ifndef _COMMON_GLOBALDATA_HPP_ #include #endif #ifndef _COMMON_STRING_HPP_ #include #endif #ifndef _COMMON_RGBCOLOR_HPP_ #include #endif #ifndef _COMMON_FONT_HPP_ #include #endif class Rect; class GDIPoint; class DrawItem; class MeasureItem; class PureDWORD; class RGBColor; class Font; template class Block; class OwnerDrawList : public Control, public RubberControl { public: OwnerDrawList(GUIWindow &parentWnd,HWND hControlWnd,UINT controlID); OwnerDrawList(GUIWindow &parentWnd,const Rect &initRect,UINT controlID,DWORD style=LBS_NOTIFY|LBS_HASSTRINGS|LBS_USETABSTOPS|LBS_OWNERDRAWFIXED|WS_VSCROLL|WS_HSCROLL|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_DLGFRAME); virtual ~OwnerDrawList(); OwnerDrawList &operator=(const OwnerDrawList &someOwnerDrawList); BOOL setTabStops(Block &tabStops); LONG addString(const String &stringData); LONG insertString(const String &stringData,int insertPos=-1); LONG insertStringAndMakeCurrent(const String &stringData); LONG deleteString(DWORD itemIndex); WORD setCurrent(WORD itemIndex); LONG getCurrent(void); LONG getCount(void); LONG setSelection(UINT itemIndex,WORD selectionState); LONG getText(String &stringData,DWORD itemIndex=0L); LONG getSelItems(GlobalData &selectedItems); LONG getSelCount(void); LONG getSel(UINT itemIndex); LONG getCursorItem(void); LONG getItemRect(UINT itemIndex,Rect &someRect); LONG findStringExact(const String &itemString,int startIndex=-1)const; LONG findString(const String &itemString,int startIndex=-1)const; LONG setCaretIndex(int itemIndex,BOOL scrollIntoView)const; LONG selItemRange(UINT rangeFirst,UINT rangeLast,BOOL select=TRUE)const; LONG itemFromPoint(const GDIPoint &somePoint); void setRedraw(WORD isInDraw); void resetContent(void); LONG textOut(const DrawItem &drawItem,const String &strData,int xLocation=0); GUIWindow &getParent(void); int dlgWidthUnits(void)const; BOOL isOkay(void)const; protected: virtual WORD handleDraw(const DrawItem &drawItem); virtual WORD handleMeasureItem(MeasureItem &measureItem); virtual LPARAM handleControlColor(PureDevice &pureDevice,Control &wndListBox); virtual void drawEntire(const DrawItem &drawItem); virtual void handleResize(WORD width,WORD height); virtual GUIWindow &controlWindow(void); private: enum {MaxItems=32767}; CallbackData::ReturnType drawItemHandler(CallbackData &someCallbackData); CallbackData::ReturnType measureItemHandler(CallbackData &someCallbackData); CallbackData::ReturnType controlColorHandler(CallbackData &someCallbackData); CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); Callback mDrawItemHandler; Callback mMeasureItemHandler; Callback mControlColorHandler; Callback mSizeHandler; GUIWindow &mParentWnd; GlobalData mTabStopArray; int mDlgWidthUnits; }; inline OwnerDrawList &OwnerDrawList::operator=(const OwnerDrawList &/*someOwnerDrawList*/) { // private implementation return *this; } inline void OwnerDrawList::setRedraw(WORD isInDraw) { if(!isOkay())return; sendMessage(WM_SETREDRAW,isInDraw,0L); } inline void OwnerDrawList::resetContent(void) { if(!isOkay())return; setRedraw(FALSE); sendMessage(LB_RESETCONTENT,0,0L); setRedraw(TRUE); } inline GUIWindow &OwnerDrawList::getParent(void) { return mParentWnd; } inline int OwnerDrawList::dlgWidthUnits(void)const { return mDlgWidthUnits; } inline BOOL OwnerDrawList::isOkay(void)const { return isValid(); } #endif