wbscut

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  4 随笔 :: 0 文章 :: 4 评论 :: 0 Trackbacks

都知道在对话框最小化或将对话框拖出屏幕再将其激活(显示)或再拖回来时,如果需要让原来对话框中有的图显示出来,那就得进行重绘。大家也都知道重载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却正常,不知为什么!!

posted on 2006-05-05 19:03 汪波的C++乐园 阅读(2588) 评论(0)  编辑 收藏 引用 所属分类: windows程序设计

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理