首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

WTL 重画CButton DrawItem不响应?该怎么解决

2012-03-29 
WTL 重画CButton DrawItem不响应?对话框上有一个按钮m_btnOKclassCMainDlgtypedefCImgDialogBase CMainD

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

热点排行