直接在窗口而不是儿童窗口上画画?

时间:2015-06-27 16:51:09

标签: c++ windows gdi

上下文:在Windows上运行的本机C ++桌面应用程序。 GUI使用普通的旧GDI和标准控件。应用程序本身不是GUI丰富的,但我使用的所有标准控件(静态,按钮,编辑和列表作为基础)可以是所有者绘制的,自定义绘制的,也可以是{{{ 3}}

我的问题是关于GUI的某些部分我将直接绘制到对话框/窗口上。这些部分中的每一个都由一个矩形明确界定,该矩形作为快速访问的属性保留,并且这些部分仅在它们各自的矩形与来自both和类似消息的矩形重叠时才被绘制。主要是绘制文字和图标(透明背景)。这些部分不需要任何最终用户交互,但它们显示有价值的信息(想想状态栏或任何其他对状态变化做出反应的GUI元素)。

由于在这里和那里聚集了一些技巧,结果是平滑无闪烁的。

问:但是,出于好奇,我想知道在这种情况下(即:非丰富的应用程序)为每个人创建一个子窗口会带来什么好处其中一个"部分"而不只是坚持当前的一体化绘图技术?有什么理由我不得不考虑创建儿童窗户吗?

从我的立场来看,我只看到创建子窗口的缺点,因为它意味着更多资源(子窗口加上它们的上下文),还有必须处理它们的过程,这意味着需要更多的代码来编写 - 然后维护。 / p>

2 个答案:

答案 0 :(得分:0)

几个月后回答我自己的问题......

所描述的应用程序的工作方式很好,只要处理那些控件矩形(内容和绘图)的代码量不会膨胀父窗口的代码。此外,这个技术使应用程序免于创建与其他(子)窗口相关联的任何资源,这不是一件坏事。

话虽如此,如果layered父窗口仅使用UpdateLayeredWindow进行更新,则可以更好地(更加速度优化)创建子控件,尤其是在我们需要时经常更新他们的内容。

答案 1 :(得分:0)

使用子窗口的好处是简化和代码重用。 Microsoft已经实现了许多标准控件,而其他控件可以从不同的源获得,所有这些控件都作为独立窗口实现。窗口将获取针对它的消息,以便父​​级不必包含逻辑来确定哪个函数需要响应特定消息。