CStatic中的CPaintDC没有切割图纸

时间:2012-07-04 11:23:35

标签: visual-c++ gdi onpaint

据我所知,派生的CStatic控件中的My OnPaint()方法应该是切割比控件更大的绘图部分。 但它没有这样做。

void CGraph::OnPaint ()
{
   CPaintDC dc(this);
   dc.SetViewportOrg (0, 400);
   dc.SetMapMode(MM_ISOTROPIC);
   dc.SetWindowExt(1000, 800);
   dc.SetViewportExt(1000, -800);

   // MessageBox(L"OnPaint");
   ProcessData ();
   DrawCoordinateSystem (&dc);
   DrawGrid (&dc);
   DrawGraph (&dc);
}

2 个答案:

答案 0 :(得分:0)

取决于方法的定义。

OnPaint实际上不是一种方法;它是一个静态成员函数,用于通过将其映射到消息映射数组中来处理WM_PAINT消息。

对于C ++,我个人更喜欢将其称为成员函数以便清晰。

您可以使用ON_MESSAGE宏创建自己的处理程序,并根据需要调用它。 代码片段并没有多说,因为它没有显示绘图(绘画)的代码。您应该包含实际执行痛苦的代码。

如果您可以附上展示您问题的项目,那将是最好的。

您是否尝试绘制尺寸大于窗口的简单位图?

答案 1 :(得分:0)

@JohnCz现在知道了。

CDC* pDC = GetDC();
CRect rClient();
GetClientRect(rClient);
CRgn ClipRgn;
if (ClipRgn.CreateRectRgnIndirect(&rClient))
{
    pDC->SelectClipRgn(&ClipRgn);
}


// Drawing content


pDC->SelectClipRgn(NULL);
ReleaseDC(pDC);

感谢您的回答