在另一个CWnd上绘制CWnd

时间:2012-11-12 16:14:31

标签: c++ mfc

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

此ItemBase类允许覆盖虚拟函数void drawItem(CDC *,CRect) 它允许在提供的CDC和剪切的区域CRect中绘制自己的图纸。

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

所以我所做的是:

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

    m_sophisticatedWindow->的MoveWindow(面积); //在合适的地方移动窗口 m_sophisticatedWindow->打印(dc,PRF_CLIENT); //渲染

  7. 所以我期待在适当的磨削控制位置,将绘制一个合适的复杂窗口,但没有任何反应。 我尝试过使用PrintClient / PrintWindow而不是Print。 我也在使用MoveWindow进行实验 - 比如将位置改为某些固定位置,但它没有帮助。

    如果我在drawItem中直接在CDC上绘制任何东西(比如直线,点等) - 一切都很好,只是打印功能看起来不像我期望的那样。

    任何线索?

1 个答案:

答案 0 :(得分:0)

我遇到的问题是我的CDC设置了裁剪区域。 所以,只要我在“错误”的地方画画,就什么都没有出现。

相关问题