为什么CToolTipCtrl父级很重要?

时间:2016-01-19 00:54:18

标签: c++ winapi mfc tooltip gdi

最近,我遇到了奇怪的UI问题,找到了解决方案,但仍不确定问题原因。

前提条件

MFC MDI应用程序打开了2个无模式对话框,它们都有一个子第三方网格和CToolTipCtrl。对话窗口彼此交叉(即,活动对话框与非活动对话框的一部分重叠)。 CToolTipCtrl类似于示例,工具提示的唯一工具集是网格。工具提示的父级是有相应对话框的网格TTS_ALWAYSTIP样式设置为允许非活动对话框上的工具提示。

问题

当鼠标悬停在非活动对话框的网格上时,工具提示正在显示,并且非活动对话框将在活动对话框上绘制。换句话说,非活动窗口在没有激活的情况下被置于顶部。它完全绘制,包括标题,按钮,网格等。

我检查了Z顺序,发现无效对话框仍处于非活动状态,即使显示在顶部也是如此。没有Z顺序改变。然后,当工具提示出现时,我使用Spy ++收集了整个非活动对话框的消息日志,但未找到WM_ACTIVATEWM_FOCUSWM_MDIACTIVATE等。然后我执行搜索,了解如何在不激活的情况下启动窗口并记录了SetWindowPos调用 - 仅对CToolTipCtrl窗口执行了调用。因此,对于调用的对话框没有SetWindowPos。没有BringToTop()调用。

解决方案

我已经将工具提示的父窗口从对话框的网格更改为对话框本身 - 以及已解决的问题。但是,我仍然不知道发生了什么以及为什么更改父属性很重要。

问题

有人能给我一个关于我失踪的提示吗?也许,工具提示导致重新绘制网格,并且该重绘有一个错误导致重写活动窗口,但我还没有找到任何证据。

Haven还在MSDN中找到了关于工具提示的父属性的具体内容。也许,我必须阅读关于Windows GDI的内容?

0 个答案:

没有答案