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看看