非模态显示的子窗口中,为何不能在它的OnPaint()中对窗口中控件的DC进行绘图?附代码,解决马上结贴!请进!!
我用非模态方式显示出一个子对话框窗口,上面有个静态文本框控件IDC_NORMAL用来绘图。我想在这个窗口的WM_PAINT消息响应函数OnPaint()中加上如下的代码绘图:
void CToolbarDialog::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CDC *pDC;
pDC=GetDlgItem(IDC_NORMAL)-> GetDC();
CPen *pen=pDC-> SelectObject(&m_penGray);//保存原来的画笔
pDC-> MoveTo(0,31);
pDC-> LineTo(0,0);
pDC-> LineTo(31,0);
pDC-> LineTo(31,31);
pDC-> LineTo(0,31);
pDC-> SelectObject(&pen);//把原来的画笔选回DC中
ReleaseDC(pDC);//释放对DC控制
// Do not call CDialog::OnPaint() for painting messages
}
上面的代码没有用,窗口被其他窗口遮住后,原来绘制的图形就不见了,好象没有进行重绘啊!如果直接在这个子对话框窗口的客户区中或是在主窗口中倒是可以重绘,而在静态文本控件中就不能重绘。请问这是为什么?
另外,同样的问题在窗口的初始化函数OnInitDialog()也存在。
[解决办法]
重载控件,在控件的OnPaint()中绘图。