void CHistogram::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here CString str;
CWnd *pWnd = GetDlgItem(IDC_HISTOGRAM); // IDC_HISTOGRAM为对话框的一个TEXT控件
CDC *pDc = pWnd->GetDC();
RECT rect;
pWnd->GetClientRect(&rect);
CPen* pRedPen = new CPen;
pRedPen->CreatePen(PS_SOLID,1,RGB(255,0,0)); // 红色画笔
CPen* pOldPen = pDc->SelectObject(pRedPen);
pDc->Rectangle(&rect); pDc->SelectObject(pOldPen);
delete pRedPen;
}为什么上面的程序无法绘制出矩形呢?
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here CString str;
CWnd *pWnd = GetDlgItem(IDC_HISTOGRAM); // IDC_HISTOGRAM为对话框的一个TEXT控件
CDC *pDc = pWnd->GetDC();
RECT rect;
pWnd->GetClientRect(&rect);
CPen* pRedPen = new CPen;
pRedPen->CreatePen(PS_SOLID,1,RGB(255,0,0)); // 红色画笔
CPen* pOldPen = pDc->SelectObject(pRedPen);
pDc->Rectangle(&rect); pDc->SelectObject(pOldPen);
delete pRedPen;
}为什么上面的程序无法绘制出矩形呢?
{
CPaintDC dc(this); // device context for painting CWnd *pWnd = GetDlgItem(IDC_HISTOGRAM); // IDC_HISTOGRAM为对话框的一个TEXT控件
//CDC *pDc = pWnd->GetDC(); //们必要的这句
RECT rect;
pWnd->GetClientRect(&rect);
CRect NewRect(rect.left+5,rect.top+5, rect.right-5,rect.bottom-5);//新建一个矩形进行绘图,
//其尺寸比控件小一点。CPen* pRedPen = new CPen;
pRedPen->CreatePen(PS_SOLID,1,RGB(255,0,0)); // 红色画笔
CPen* pOldPen = dc.SelectObject(pRedPen);
dc.Rectangle(&rect); dc.SelectObject(pOldPen); delete pRedPen;
}
dc.Rectangle(&rect);
改为
dc.Rectangle(&NewRect);
先排除另外一种可能先,试试看 矩形区域不和 text 文本重叠 时候是什么图像。
pWnd->GetClientRect(&rect);
CRect NewRect(rect.left-5,rect.top-5, rect.right-5,rect.bottom-5);
//新建一个矩形进行绘图,
//往左上方偏移5个单位如果通过以上代码发现红色区域出来了,只是被控件遮挡了。那么可以肯定,
在对话框第一次出来的时候,如果没有UpdateWindow,这个区域应该会处于背景之上,控件之下。
如果发现红色区域还没出来,那估计就是我们对这个重绘机制还不够了解,和你一起学习了!