仅 Vista 上的子窗口绘画问题

发布于 2024-10-26 15:00:52 字数 457 浏览 3 评论 0原文

我有一个基于对话框的 MFC C++ 应用程序。我的对话框显示许多“页面”(类似于选项卡页或属性对话框)。

我通过在父级客户区域顶部显示子窗口来显示每个“页面”。这在 Vista 上工作得很好,直到我在孩子上面打开另一个窗口。

然后,Vista 似乎在我的父对话框中绘制了一个粗的白色矩形框架,该框架绘制在我的“页面”子窗口的顶部。如果我将另一个窗口移动到这个白色矩形的顶部,它将很好地重新绘制被遮挡的区域。

有人可以告诉我发生了什么事吗? Vista 是否试图使用不正确的坐标来清除我的非客户端(框架)区域?

我的父对话框是一个从 CDialog 派生的皮肤类,它处理我自己的窗口标题栏和框架的绘制。我发现如果我不在自己的 OnNcActivate() 方法中调用 CDialog::OnNcActivate() ,则不会出现白色矩形。当然,如果我这样做,那么我将无法使用我的子窗口..但 OnNcActivate 似乎与该问题有关。

I have a dialog-based MFC C++ app. My dialog displays a number of "pages" (similar to a tab page or property dialog box).

I display each "page" by displaying a Child window over the top of the parent's client area. This works fine on Vista until I then open another window on top of the child.

Vista then seems to draw a thick white rectangular frame within my parent dialog box which paints over the top of my "page" child window(s). If I move another window over the top of this white rectangle, it will repaint the obscured area just fine.

Can somebody please tell me what is going on? Is Vista trying to clear my non-client (frame) area using incorrect coordinates perhaps?

My parent dialog is a skinned class derived from CDialog which handles the painting of my own window titlebar and frames. I've found that if I don't call CDialog::OnNcActivate() within my own OnNcActivate() method, the white rectangle doesn't appear. Of course if I do this then I can't use my child windows.. but OnNcActivate would appear to be related to the problem.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浪推晚风 2024-11-02 15:00:52

我已经解决了问题..我不应该调用 CDialog::OnNcActivate() - 我应该只是返回 TRUE 。现在一切正常。

I've figured out the problem.. I shouldn't be calling CDialog::OnNcActivate() - I should have just been returning TRUE instead. All working fine now.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文