MFC扩展DLL的问题

吹雪 2009-08-31 10:13:49
在一个MFC扩展DLL中导出一个三态选择树类CTreeCtrlEx,派生于CTreeCtrl。

我在CTreeCtrlEx的PreSubClass函数中写了如下代码:
void CCheckedTreeCtrl::PreSubclassWindow() 
{
CTreeCtrl::PreSubclassWindow();

HINSTANCE hInstOld = AfxGetResourceHandle();
AfxSetResourceHandle(xhlctrlsDLL.hResource);
m_imgState.Create(IDB_BITMAP_CHECKBOX,13, 1, RGB(255,255,255));
m_imgList.Create(IDB_BITMAP_FOLDER,16, 1, RGB(255,255,255));
AfxSetResourceHandle(hInstOld); // restore the old resource chain
SetImageList(&m_imgState,TVSIL_STATE);
SetImageList(&m_imgList,TVSIL_NORMAL);
}


但是这样总是使得树的state icon和item icon显示不正确。
如果改成以下这样就可以:
void CCheckedTreeCtrl::PreSubclassWindow() 
{
CTreeCtrl::PreSubclassWindow();

HINSTANCE hInstOld = AfxGetResourceHandle();
AfxSetResourceHandle(xhlctrlsDLL.hResource);
m_imgState.Create(IDB_BITMAP_CHECKBOX,13, 1, RGB(255,255,255));
m_imgList.Create(IDB_BITMAP_FOLDER,16, 1, RGB(255,255,255));
AfxSetResourceHandle(hInstOld); // restore the old resource chain
SetImageList(&m_imgState,TVSIL_STATE);
SetImageList(&m_imgList,TVSIL_NORMAL);
SetImageList(&m_imgState,TVSIL_STATE); // 不调两遍就没有效果,不知道是为什么。
SetImageList(&m_imgList,TVSIL_NORMAL);
}


不知道是什么原因?
xhlctrlsDLL是正确的。在DLLMAIN中有如下语句:
if (!AfxInitExtensionModule(xhlctrlsDLL, hInstance))
return 0;


DLL与EXE均动态使用MFC,均为release编译,都对_UNICODE,UNICODE进行了预定义再编译的。
...全文
58 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
吹雪 2009-09-01
  • 打赏
  • 举报
回复
一语惊醒梦中人啊。

佩服佩服!
feilinhe 2009-09-01
  • 打赏
  • 举报
回复
把那几行代码调换位置行不?
oyljerry 2009-08-31
  • 打赏
  • 举报
回复
^_^,难道bug?

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧