我一般是 MFC 和 Windows 编程的新手,这是我不理解的东西 我
一直在阅读的所有地方都说不要在 OnPaint 中使用 CClientDC,而只使用 CPaintDC
在我的代码中,我将矩形绘图函数附加到默认 OnPaint () 处理程序在我使用向导创建基于对话框的 MFC 应用程序时创建
void Cgraph_on_dlgboxDlg::OnPaint()
{
CPaintDC dc(this); // ----------------------------> LINE 1
if (IsIconic())
{
// CPaintDC dc(this); // device context for painting // ----------------------------> LINE 2
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
COLORREF pencolour = RGB(0, 0, 0);
COLORREF brushcolour = RGB(0, 0, 255);
CPen pen(PS_SOLID, 5, pencolour);
CBrush brush(HS_CROSS, brushcolour);
// CPaintDC Dc(this); // ----------------------------> LINE 3
// CClientDC Dc(this); // ----------------------------> LINE 4
dc.SetBkMode(TRANSPARENT);
/****
get rectangle coordinates and properties
****/
dc.Rectangle(CRect(point1, point2));
}
在此代码中,最初LINE 1
不存在。CClientDC
在这种情况下,如果在 in 中声明,程序将绘制一个矩形,但在in启用LINE 4
时不绘制任何内容。如果删除了 CPaintDC并注释掉了第 3 行和第 4 行,则它可以工作。为什么会这样?据我了解, CClientDC 根本不应该在这里工作,还是我错过了什么?
同样, in 不应该只在 if 块内有它的范围吗?为什么声明 CPaintDC 两次根本没有输出?CPaintDC
LINE 3
LINE 2
LINE 1
CPaintDC
LINE 2