0

我有一个 CWnd(父级),它拥有一个允许在其上绘制一些项目的网格控件。问题是我想在上面绘制一些复杂的 CWnd,但网格控制只允许绘制派生自与 CWnd 无关的“ItemBase”类的项目。

这个 ItemBase 类允许覆盖一个虚函数 void drawItem(CDC *, CRect),它允许在提供的 CDC 和裁剪区域 CRect 中绘制自己的图形。

我的想法是将复杂的 CWnds 创建为父窗口的不可见子项,然后在 ItemBase 的 drawItem 中使用提供的 CDC 上的 CWnd::Paint。

所以我要做的是:

  1. 我有一个网格控件。
  2. 我创建了一组复杂的窗口
  3. 我(为每个复杂的窗口)创建一个从 ItemBase 派生的类对象
  4. 我将一组基本类型 ItemBase 的对象添加到网格控件
  5. 在 drawItem(CDC *dc, CRect area) 我调用:

    m_sophisticatedWindow->MoveWindow(区域); //移动窗口到合适的位置 m_sophisticatedWindow->Print(dc, PRF_CLIENT); //渲染它

所以我期待在适当的研磨控制位置上绘制适当的复杂窗户,但是什么也没有发生。我尝试使用 PrintClient/PrintWindow 而不是 Print。我也在用 MoveWindow 做实验——比如改变位置到一些固定的位置,但它没有帮助。

如果我在 drawItem 中直接在 CDC 上绘制任何东西(如线条、点等) - 一切都很好,只是 Print 函数似乎没有按照我的预期做。

有什么线索吗?

4

1 回答 1

0

我遇到的问题是我得到了设置为 CDC 的剪辑区域。所以只要我在“错误”的地方画画,什么都不会出现。

于 2012-12-03T13:29:38.440 回答