电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

mfc+窗口分析+popup+,overlap,childVIP免费

mfc+窗口分析+popup+,overlap,child_第1页
1/28
mfc+窗口分析+popup+,overlap,child_第2页
2/28
mfc+窗口分析+popup+,overlap,child_第3页
3/28
窗口分析 (本文尝试通过一些简单的实验,来分析 Windows 的窗口机制,并对微软的设计理由进行一定的猜测,需要读者具备 C++、Windows 编程及 MFC 经验,还得有一定动手能力。文中可能出现一些术语不统一的现象,比如“子窗口”,有时候我写作“child window”,有时候写作“child”,我想应该不会有太大影响,文章太长,不一一更正了) 问题开始于我的最近的一次开发经历,我打算把程序的一部分界面放在 DLL 中,而这部分界面又需要使用到 Tooltip,但 DLL 中的虚函数 PreTranslateMessage 无法被调用到,原因大家可以在网上搜索一下,这并不是我这篇文章要讲的。PreTranslateMessage 不能被调,那Tooltip也就不 能 起作 用 , 因 为Tooltip需 要 在PreTranslateMessage中 加入tooltip.RelayEvent(&msg)来触发事件,方可正常显示。解决方法有好几个,我用的是比较麻烦的一个——完全自己手动编写 Tooltip,然后用 WM_MOUSEMOVE 等事件来触发 Tooltip显示,写好之后发现些小问题,那就是调试运行时候 IDE 给了个warning,说我在析构函数中调用了 DestroyWindow,这样会导致窗口 OnDestry 和 OnNcDestroy 不被正常调用,这个问题我以前遇到过,当然解决方法也是显而易见的,只需要在窗口对象(C++概念,非Windows 内核对象,下文同)销毁前,调用 DestroyWindow 即可。对于要销毁的这个窗口的子窗口,是不需要显式调用 DestroyWindow 的,因为父窗口在销毁的时候也会销毁掉它们,OK,我把这个过程用个示意图说明一下: 图 1 上图表示了 App Window 及其子窗口的关系,现在假设我们要销毁 Parent Window 1(对应的对象指针是m_pWndParent1),我们可以 m_pWndParent1->DestroyWindow(),这样 Child Window 1,Parent Window 2,Child Window 2 都被销毁了,销毁的时候这些窗口的 OnDestry和 OnNcDestroy 都被调用了,最后 delete m_pWndParent1,此时 m_pWndParent1->m_hWnd已经是NULL,不会再去调用 Destroy,在析构的时候也就不会出现 Warning。但如果不先执行 m_pWndParent1->DestroyWindow()而直接 delete m_pWndParent1,那么在 CWnd::~CWnd中就会调用 DestroyWindow(m_hWnd),这样会产生 WM_DESTROY 和 WM_NCDESTROY,会尝试去调用 OnDestry 和 OnNcDestroy,但由于是在 CWnd 的函数~CWnd()的内部调用这两个成员,此时的虚函数表指针并不指向派生类的虚函数...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

mfc+窗口分析+popup+,overlap,child

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部