重绘控件 DrawItem() 不能被执行!
首先,这个问题在mfc工程中用添加 MyButton.h MyButton.cpp源码的办法是没有问题的!
关键是我想把CMyButton封装成库并导出类!
但是发现使用封装导出后的库就无法命中DrawItem() 方法了。
发现 DLLExport void CMyButton::PreSubclassWindow()
{
ModifyStyle(0, BS_OWNERDRAW); // make the button owner drawn
CButton::PreSubclassWindow();
}
DLLExport BOOL CMyButton::Attach(const UINT nID, CWnd* _pParent)
{
if (!SubclassDlgItem(nID, _pParent))
return FALSE;
isAttached = TRUE;
;
return TRUE;
}
DLLExport void CMyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
....
}
//=========================================
使用方法:
CMyButton myBtn;
myBtn.Attach( CtrlID, this );
//=========================================
发现执行顺序有错误
本应该先执行Attach(..)再执行 PreSubclassWindow();
但在执行Attach()中的SubclassDlgItem()的同时又进入了PreSubclassWindow()
导致pParent没有传进来,这是为什么,有没有高手帮帮小弟啊,本人很穷没太多分相送,希望能不吝赐教!
[解决办法]
MyButton是不是重载了OnPaint??
不是说 只有控件勾选了Owner Draw Fixed 的选项,才能重载DrawItem吗?
[解决办法]
updatewindow()