读书人

WTL 重画CButton DrawItem不响应?该怎

发布时间: 2012-03-29 12:53:12 作者: rapoo

WTL 重画CButton DrawItem不响应?
对话框上 有一个按钮m_btnOK

class CMainDlg;

typedef CImgDialogBase <CMainDlg, IDB_BITMAP_DIALOG_WAITING> CImgDialogBaseForMainDlg;

class CMainDlg : public CImgDialogBaseForMainDlg
, public CWinDataExchange <CMainDlg>

{
BEGIN_DDX_MAP(CMainDlg)
DDX_CONTROL(IDOK, m_btnOK)
END_DDX_MAP()

CImgButton <IDB_BITMAP_BTN_OK_NORMAL, IDB_BITMAP_BTN_OK_HOVER, IDB_BITMAP_BTN_OK_DOWN, IDB_BITMAP_BTN_OK_DISABLED>
m_btnOK;
};


CImgButton 类如下:
template <UINT T_NormalBitmapID, UINT T_HoverBitmapID, UINT T_DownBitmapID, UINT T_DisableBitmapID>
class CImgButton : public CWindowImpl < CImgButton < T_NormalBitmapID, T_HoverBitmapID, T_DownBitmapID, T_DisableBitmapID> , CButton>
, public COwnerDraw <CImgButton < T_NormalBitmapID, T_HoverBitmapID, T_DownBitmapID, T_DisableBitmapID> >
{
public:
CImgButton(){}

~CImgButton(){}

typedef CImgBkgndBase <CImgButton < T_NormalBitmapID, T_HoverBitmapID, T_DownBitmapID, T_DisableBitmapID> , T_NormalBitmapID> CImgBkgndForImgButton;

typedef COwnerDraw <CImgButton < T_NormalBitmapID, T_HoverBitmapID, T_DownBitmapID, T_DisableBitmapID> > COwnerDrawForImgButton;

BEGIN_MSG_MAP(CImgButton)
CHAIN_MSG_MAP_ALT( COwnerDrawForImgButton, 1)
DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP()

void DrawItem ( LPDRAWITEMSTRUCT lpdis )
{

::MessageBox( NULL, _T( "1 "), _T( "1 "), IDOK);
}


};


我参照了 http://www.codeproject.com/wtl/WTL4MFC5.asp

在设计器里面,设置了 这个Button的 OWNER_DRAWER属性

但是
DrawItem 不响应

WTL7.5 VS2005

[解决办法]
添加BS_OWNERDRAW样式
[解决办法]
你的DrawItem是虚函数吗?
[解决办法]
增加notify的style看看
还有,这个只在按钮状态发生改变的时候才调用,先hide再show看看

读书人网 >VC/MFC

热点推荐