都知道在对话框最小化或将对话框拖出屏幕再将其激活(显示)或再拖回来时,如果需要让原来对话框中有的图显示出来,那就得进行重绘。大家也都知道重载CDialog的OnPaint()函数。但实际用的时候还是有很多的问题。其中我碰到一个问题就是:若将CDialog::OnPaint()
注释掉,CPU占用竟然达到100%,所以我只好将其保留,然后在其后面加上我要重绘的内容。
void CTestDlgDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (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
{
CDialog::OnPaint();
if(m_Dib.m_pData!=NULL)
{
CRect rc;
((CWnd*)(GetDlgItem(IDC_SOURCEIMG)))->GetClientRect(&rc);
CPaintDC m_dc(GetDlgItem(IDC_SOURCEIMG));
m_dc.SetStretchBltMode(COLORONCOLOR);
m_dc.FillSolidRect(rc,RGB(100,100,100));
StretchDIBits(m_dc.m_hDC,0,0,m_Dib.m_pBmpInfoHeader->biWidth,m_Dib.m_pBmpInfoHeader->biHeight,0,0,m_Dib.m_pBmpInfoHeader->biWidth,m_Dib.m_pBmpInfoHeader->biHeight,m_Dib.m_pData,m_Dib.m_pBmpInfo,DIB_RGB_COLORS,SRCCOPY);
}
}
}
这里的 m_dc.FillSolidRect(rc,RGB(100,100,100));是重绘picture的背景颜色,不知为什么在运行一开始其原来的背景就被刷掉了,只好自己在这里重绘!!
但我今天刚看来别人的一个例子,他将CDialog::OnPaint()注释掉,CPU却正常,不知为什么!!