【问题标题】:Redraw in parent window in child window's onPaint in mfc在 mfc 中子窗口的 onPaint 中重绘父窗口
【发布时间】:2013-07-27 22:24:28
【问题描述】:

我正在尝试在 mfc 中实现类似的东西:

包含几个子窗口的父窗口。当窗口被拖动到父窗口内的任何位置时,我希望在子窗口周围出现一些水平和垂直网格线。为此,我在我的 OnPaint() 处理程序中跟踪子项的移动,并访问父项并在子项周围绘制这些网格线。但它的行为不像我想要的那样。

我的猜测是孩子的 OnPaint() 只更新了孩子的绘图区域,所以即使我确实访问了父母的 DC,我也无法在其上绘制任何东西,除非它正在重绘?

谁能提出一种更简洁的方法来实现上述功能?我究竟做错了什么?我需要在孩子的 OnPaint() 中发生一切

【问题讨论】:

    标签: c++ mfc


    【解决方案1】:

    解决此问题的一种方法是使用UpdateLayeredWindow 在父客户区顶部绘制一个半透明网格窗口,同时将子窗口安排在其​​顶部。然后可以在排列完成后销毁网格窗口。这样,现有显示代码所需的更改最少。

    【讨论】:

      【解决方案2】:

      一种方法是将数据传递给父窗口并调用其 Invalidate 函数。然后它会在自己的 OnPaint 中绘制网格线。

      或者您可以直接在子窗口上绘制父窗口,但使用父窗口的 GetDC 函数而不是使用子窗口的 DC。

      【讨论】:

      • 如果我调用父级的无效函数,它会绘制所有子窗口以及其中的其余内容吗?当孩子被拖到屏幕上时,我只需要围绕孩子的网格线。这就是我最初尝试的,在孩子的 OnPaint 中获取父母的 DC 并绘制这些网格线。这在技术上应该可行吗?但在我的情况下什么也没画。如果我在屏幕上随机拖动导致分配 OnPaint 调用,那么我会看到一些重叠的行。
      猜你喜欢
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      • 2011-08-05
      • 2010-11-22
      相关资源
      最近更新 更多