在子窗口的父窗口中重绘在 mfc 中绘制

Redraw in parent window in child window's onPaint in mfc

本文关键字:窗口 绘制 mfc      更新时间:2023-10-16

我正试图在mfc:中实现这样的东西

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

我的猜测是,孩子的OnPaint()只更新孩子的绘图区域,所以即使我访问了家长的DC,我也不能在上面画任何东西,除非它被重新绘制?

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

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

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

解决此问题的一种方法是在父客户端区域的顶部使用UpdateLayeredWindow绘制一个半透明的网格窗口,同时将子窗口排列在其顶部。排列完成后,可以销毁网格窗口。通过这种方式,将对现有显示代码进行最低限度的更改。