0

据我所知,派生的 CStatic 控件中的我的 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);
}
4

2 回答 2

0

取决于方法的定义。

OnPaint 并不是真正的方法;它是一个静态成员函数,用于通过将 WM_PAINT 消息映射到消息映射数组中来处理它。

对于 C++,为了清楚起见,我个人更喜欢将其称为成员函数。

您可以使用 ON_MESSAGE 宏创建自己的处理程序,并随心所欲地调用它。代码片段并没有说明太多,因为它没有显示绘图(绘画)的代码。您应该包含实际执行绘画的代码。

如果您可以附加项目来证明您的问题,那就最好不过了。

您是否尝试绘制一个比窗口大的简单位图?

于 2012-07-05T20:13:31.517 回答
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);

感谢您的回答

于 2012-07-06T13:46:01.433 回答