【发布时间】:2012-07-06 21:49:20
【问题描述】:
我正在编写 MFC 应用程序。我在窗体对话框上创建了一个 CStatic 派生控件,以便在启动程序时直接看到窗体。我现在使用派生类中的 OnPaint() 方法在此控件中绘图。到目前为止,一切正常。 然而,奇怪的是,这些图纸并没有被剪裁到控件之外。相反,如果我画了非常大的东西,整个形式都会被画出来。在我的理解中,应该只绘制控件。
提前致谢 安德烈亚斯 D.
【问题讨论】:
我正在编写 MFC 应用程序。我在窗体对话框上创建了一个 CStatic 派生控件,以便在启动程序时直接看到窗体。我现在使用派生类中的 OnPaint() 方法在此控件中绘图。到目前为止,一切正常。 然而,奇怪的是,这些图纸并没有被剪裁到控件之外。相反,如果我画了非常大的东西,整个形式都会被画出来。在我的理解中,应该只绘制控件。
提前致谢 安德烈亚斯 D.
【问题讨论】:
@dlb 现在知道了。
CDC* pDC = GetDC();
CRect rClient();
GetClientRect(rClient);
CRgn ClipRgn;
if (ClipRgn.CreateRectRgnIndirect(&rClient))
{
pDC->SelectClipRgn(&ClipRgn);
}
// Drawing content
pDC->SelectClipRgn(NULL);
ReleaseDC(pDC);
感谢您的回答
【讨论】:
检查您的控件是否使用“未剪辑的设备上下文”选项。您可以通过获取控制标志来检查这一点。 您也可以调用 IsOptimizedDraw(),如果返回 true,则您的绘图可以在控件之外绘制。
【讨论】: