动态库(dll)中,创建窗口消息响应问题.

吉哥 2008-06-23 11:41:49
请教,主程序中有窗口容器,如标签控件,可以支持加入多个子窗口.在主程序中创建了几个子窗口,加入其中都没有问题.通过调用动态库,获得其中创建的子窗口(传递父窗口指针或句柄都试过),并加入容器中,一切正常.除了动态库中创建的子窗口不响应各种输入消息(键盘输入/鼠标双击),以及各种虚函数调用(DrawItem等).这是为什么?常见消息只响应WM_SIZE.
...全文
134 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyinlei 2008-06-25
  • 打赏
  • 举报
回复
dll是输出整个类吗?比如CMyListBox?

用MFC扩展dll应该是没问题的,用的时候需要子类化一下,比如CMyListBox listBox; ID为IDC_LISTBOX
listBox.SubclassWindow( GetDlgItem(IDC_LISTBOX)->m_hWnd );

就会调用到CMyListBox 里面的消息处理函数
吉哥 2008-06-25
  • 打赏
  • 举报
回复
原来设计的思想就是特殊窗口在动态库中实现,主程序通过接口去查询各个动态库中是否输出窗口,然后添加到标签项中。目的就是为了独立性强,由动态库自己去处理各种窗口内容。大家还有什么更好的意见和建议。明天准备结贴。
pomelowu 2008-06-25
  • 打赏
  • 举报
回复
很难,不过不是一定不能解决。问题是即使解决了,从设计的角度看,耦合性也很高,不是很好的设计。
pomelowu 2008-06-24
  • 打赏
  • 举报
回复
嗯,是這樣的,窗口函數回調和窗口的創建應該在一個模塊里,這樣就不會有問題。
吉哥 2008-06-24
  • 打赏
  • 举报
回复
如果不再一个模块里呢?像上面所描述的那样,就没有解决办法了吗?
pomelowu 2008-06-23
  • 打赏
  • 举报
回复
你在消息處理部分是在dll中還是在exe模塊中?
吉哥 2008-06-23
  • 打赏
  • 举报
回复
在普通程序中调试通过的CMyListBox类(派生于CListBoX),简单移植到DLL中。又测试发现,如果是将对话框作为子窗口就可以——此时CMyListBox是对话框的一个控件。
吉哥 2008-06-23
  • 打赏
  • 举报
回复
都是用MFC类库实现的,如CListBox的派生类CMyListBox,代码都在DLL中。因为首先在对话框中调试通过后,把类的头文件和源文件简单移植到DLL中,发现不可行。刚又测试了一下,如果在DLL中创建对话框,LISTBOX紧紧是对话框的变量,就可以了。为什么?
在线。。。。

15,979

社区成员

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

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