我有一个 CWnd(父级),它拥有一个允许在其上绘制一些项目的网格控件。问题是我想在上面绘制一些复杂的 CWnd,但网格控制只允许绘制派生自与 CWnd 无关的“ItemBase”类的项目。
这个 ItemBase 类允许覆盖一个虚函数 void drawItem(CDC *, CRect),它允许在提供的 CDC 和裁剪区域 CRect 中绘制自己的图形。
我的想法是将复杂的 CWnds 创建为父窗口的不可见子项,然后在 ItemBase 的 drawItem 中使用提供的 CDC 上的 CWnd::Paint。
所以我要做的是:
- 我有一个网格控件。
- 我创建了一组复杂的窗口
- 我(为每个复杂的窗口)创建一个从 ItemBase 派生的类对象
- 我将一组基本类型 ItemBase 的对象添加到网格控件
在 drawItem(CDC *dc, CRect area) 我调用:
m_sophisticatedWindow->MoveWindow(区域); //移动窗口到合适的位置 m_sophisticatedWindow->Print(dc, PRF_CLIENT); //渲染它
所以我期待在适当的研磨控制位置上绘制适当的复杂窗户,但是什么也没有发生。我尝试使用 PrintClient/PrintWindow 而不是 Print。我也在用 MoveWindow 做实验——比如改变位置到一些固定的位置,但它没有帮助。
如果我在 drawItem 中直接在 CDC 上绘制任何东西(如线条、点等) - 一切都很好,只是 Print 函数似乎没有按照我的预期做。
有什么线索吗?