Visual C++ 6 中对话窗口的有效重叠

Posted

技术标签:

【中文标题】Visual C++ 6 中对话窗口的有效重叠【英文标题】:effective Overlapping of dialog windows in Visual C++ 6 【发布时间】:2011-04-20 07:21:51 【问题描述】:

您好,我有子窗口重叠的问题,我创建了一个带有菜单驱动界面的软件(IDR_MAINFRAME - CFormView

等)并在单击其中一个菜单项时出现另一个子窗口(基于对话框),我在其中正常进行计算

calculator.Now,如果我打开任何其他条目,说转换也在菜单条目中的指标然后与任何其他此类重叠

窗口背景窗口被严重毁容,如果我随意移动计算器或度量转换计算器

他们毁容了,一团糟。我还在背景上放了一个位图图像。在移动计算器时,背景图像也 被删除。

请让我知道如何处理这个问题。我用谷歌搜索发现处理绘画消息或 WM_ERASEBKGND 有帮助..但我

已经尝试过这段代码,但对 OnEraseBkGnd() 没有帮助;

BOOL COfficesoftDlg::OnEraseBkgnd(CDC* pDC) 

    // TODO: Add your message handler code here and/or call default
    CRect Rect;
    GetClientRect(Rect);
    //ClientToScreen(&Rect);
    //this->ScreenToClient(&Rect);
    this->InvalidateRect(Rect);
    return CDialog::OnEraseBkgnd(pDC);

如何实现不同窗口的平滑重叠,例如记事本重叠 word 文档甚至计算器甚至 VC6

IDE 在我的项目中。 请举个例子解释一下。我只是一个新手,我需要详细了解...谢谢和问候

【问题讨论】:

VC++6 已经很老了。你应该更新你的编译器。 你好 @David 和 @DeadMG ...我知道我在做一些旧的东西,但 VC6 是最后一个非 .NET 版本的 IDE,我无能为力,这是项目的一部分..无论如何我不知道让它更容易接受...我没有包含与 MFC 工作相关的内容...可能是我很愚蠢 :) ..我只是一个新手,因为我有截止日期,所以我只是想把事情做好。无论如何我我想我正在使用 MFC 方式...请举例说明如何严格按照 MFC 方式而不是标准方式进行操作。请给我看一个示例项目..谢谢,如果我要求太高,请见谅。 ..再次感谢 查看您之前的问题并接受最有帮助的答案。在常见问题解答中了解更多信息。 【参考方案1】:
    覆盖 OnEraseBkgnd 并返回 true,以便停止擦除您正在绘制的背景。返回 TRUE 表示您已完成工作。如果您只是简单地调用基类实现,它会为您执行此操作,并且您将失去背景,直到它有机会绘制。 由于某种原因,您没有将绘制消息发送到父窗口。确保您以正确的方式调用模态。 DoModal() 工作正常。确保您不只是创建和显示模式。 如果您的窗口是同一对话框/窗口中的子窗口并且它们重叠,或者您在任一对话框/窗口中有子窗口,请确保使用 clipchildren 和 clipsiblings(如果窗口中的子窗口重叠)。否则,他们将可以按照他们选择的任何顺序进行绘画。 确保您正在根据内存进行绘画并将 bitblting 返回到您的对话框,否则您将获得闪烁效果。

【讨论】:

以上是关于Visual C++ 6 中对话窗口的有效重叠的主要内容,如果未能解决你的问题,请参考以下文章

我用 Microsoft Visual Studio 2010 新建一个 C++ 的对话框窗口程序的时候 该如何设置它的窗口类名?谢谢!

Visual C++编程技巧之四

为啥 CDC::LineTo() 不在 Visual C++ 2015 MFC 对话框中绘制?

visual c++ 中 怎样把子窗口传值到父窗口?

Visual C++ 中顺序对话框的最佳实践是啥?

MFC 对话框中的 Visual C++ 数据不显示