| template <class T> class CownerDraw { …… }; |
| class CownerDrawButton : public CbitmapButtonImpl<CownerDrawButton>, public CownerDraw<CownerDrawButton> …… |
| BEGIN_MSG_MAP(COwnerDraw< T >) MESSAGE_HANDLER(WM_DRAWITEM, OnDrawItem) …… ALT_MSG_MAP(1) MESSAGE_HANDLER(OCM_DRAWITEM, OnDrawItem) …… END_MSG_MAP() |
| LRESULT OnDrawItem(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& bHandled) { T* pT = static_cast<T*>(this); pT->SetMsgHandled(TRUE); pT->DrawItem((LPDRAWITEMSTRUCT)lParam); bHandled = pT->IsMsgHandled(); return (LRESULT)TRUE; } |
| MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackground) MESSAGE_HANDLER(WM_PAINT, OnPaint) MESSAGE_HANDLER(WM_PRINTCLIENT, OnPaint) |
| unsigned int const IMAGEPOS_TOP = 1 ; unsigned int const IMAGEPOS_BOTTOM = 2 ; unsigned int const IMAGEPOS_LEFT = 3 ; unsigned int const IMAGEPOS_RIGHT = 4 ; unsigned int const IMAGEPOS_CENTER = 5 ; |
| typedef struct _imageinfo{ int Normal ; int Pushed ; int Hover ; int Disabled ; int cx; int cy; UINT flags; int cInitial; int cGrow; }IMAGELISTINFOSTRUCT; typedef IMAGELISTINFOSTRUCT IMGINFOS; file://Load bitmap from resource Id BOOL LoadImageFromID(UINT IDBitmap ,UINT IDMask, const IMGINFOS & imgno) { if(!m_ImageList.Create( imgno.cx,imgno.cy,imgno.flags ,imgno.cInitial,imgno.cGrow)) return FALSE; CBitmap m_Mask,m_bbmp; if(!m_bbmp.LoadBitmap(IDBitmap)) return FALSE; if(!m_Mask.LoadBitmap(IDMask)) return FALSE; if((m_ImageList.Add(m_bbmp,m_Mask) == -1)) return FALSE; SetImages(imgno.Normal,imgno.Pushed ,imgno.Hover,imgno.Disabled); return TRUE; } |
| DWORD style = BMPBTN_AUTO3D_SINGLE|BMPBTN_SHAREIMAGELISTS| BMPBTN_HOVER; IMGINFOS imgis = {0,1,1,-1,30,30,ILC_COLOR24|ILC_MASK,0,2}; if(m_Button.LoadImageFromID(IDB_BUTTON,IDB_MASK,imgis)) { m_Button.SetBitmapButtonExtendedStyle(style); m_Button.SetBitmapPosStyle(IMAGEPOS_TOP); } m_Button.SubclassWindow(GetDlgItem(IDC_BUTTON1)); m_Button.SetToolTipText(_T("WTL_OwnerDrawButton!")); |
聯(lián)系客服