在另一个 CWnd 上绘制 CWnd
Posted
技术标签:
【中文标题】在另一个 CWnd 上绘制 CWnd【英文标题】:Painting CWnd on another CWnd 【发布时间】:2012-11-12 16:14:31 【问题描述】:我有一个 CWnd(父级),它拥有一个允许在其上绘制一些项目的网格控件。 问题是我想在它上面绘制一些复杂的 CWnd,但网格控件只允许绘制派生自与 CWnd 无关的“ItemBase”类的项目。
这个 ItemBase 类允许覆盖一个虚函数 void drawItem(CDC *, CRect) 允许在提供的 CDC 和裁剪区域 CRect 中绘制自己的绘图。
我的想法是将复杂的 CWnd 创建为父窗口的不可见子窗口,然后在 ItemBase 的 drawItem 中使用提供的 CDC 上的 CWnd::Paint。
所以我要做的是:
-
我有一个网格控件。
我创建了一组复杂的窗口
我(为每个复杂的窗口)创建一个派生自 ItemBase 的类对象
我将一组基本类型为 ItemBase 的对象添加到网格控件中
在 drawItem(CDC *dc, CRect area) 我调用:
m_sophisticatedWindow->MoveWindow(area); //将窗口移动到合适的位置 m_sophisticatedWindow->Print(dc, PRF_CLIENT); //渲染它
所以我希望在适当的研磨控制位置上绘制适当的复杂窗户,但是什么也没有发生。 我尝试使用 PrintClient/PrintWindow 而不是 Print。 我也在用 MoveWindow 做实验——比如将位置更改为一些固定位置,但它没有帮助。
如果我在 drawItem 中直接在 CDC 上绘制任何东西(如线、点等) - 一切都很好,只是 Print 函数似乎并没有达到我的预期。
有什么线索吗?
【问题讨论】:
【参考方案1】:我遇到的问题是我得到了设置为 CDC 的剪辑区域。 所以只要我在“错误”的地方画画,什么都不会出现。
【讨论】:
以上是关于在另一个 CWnd 上绘制 CWnd的主要内容,如果未能解决你的问题,请参考以下文章
创建单独的 MFC GUI 线程,不能移动/调整大小/最大化 CWnd