在对话框的标题栏中画图

先用MFC ClassWizard给你的工程对话框类加上函数DrawInTitle(),然后添加代码,如下:

BOOL CMmDlg::DrawOnTitle()
{
 HDC hdc=::GetWindowDC(m_hWnd);
 CDC* pdc=CDC::FromHandle(hdc);
 CRect rect;
 this->GetWindowRect(&rect);
 rect.bottom = rect.top+GetSystemMetrics(SM_CYSIZE)+3;
 IPicture *pPic;
 IStream *pStm;

 CFileStatus fstatus;
 CFile file;
 LONG cb;
 if (file.Open("f://02.bmp",CFile::modeRead)&&file.GetStatus("f://02.bmp",fstatus)&&((cb = fstatus.m_size) != -1))
 {
  HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);
  LPVOID pvData = NULL;
  if (hGlobal != NULL)
  {
   if ((pvData = GlobalLock(hGlobal)) != NULL)
   {
    file.ReadHuge(pvData, cb);
    GlobalUnlock(hGlobal);
    CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);
    if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic)))
    {
     OLE_XSIZE_HIMETRIC hmWidth;
     OLE_YSIZE_HIMETRIC hmHeight;
     pPic->get_Width(&hmWidth);      //hmWidth等于图片的实际宽度,单位未知,
     pPic->get_Height(&hmHeight);   //hmHeight等于图片的实际高度

     //GetDlgItem(IDC_STATIC_PIC)->GetWindowRect(rect);
     if(FAILED(pPic->Render(*pdc,0,0,(DWORD)(rect.right-rect.left),(DWORD)(rect.bottom-rect.top),0,hmHeight,hmWidth,-hmHeight,NULL)))
     {
      //AfxMessageBox("Failed To Render The picture!");
      pPic->Release();
      file.Close();
      ReleaseDC(pdc);
      return 0;
     }
     else
     {
      pPic->Release();
      file.Close();
      ReleaseDC(pdc);
      return TRUE;
     }
    }
   }
   else
   {
    //AfxMessageBox("Error Loading Picture From Stream!");
    file.Close();
    return FALSE;
   }
  }
 }
 else
 {
  //AfxMessageBox("Can't Open Image File!");
  return FALSE;
 }
}
上面代码中用f://02.bmp作为图画上去,先最好把该文件加工成标题栏差不多大小和比例,以免显示时产生变形。这里用.bmp、.jpg或.gif格式的图片都可以。

接着再用MFC ClassWizard给你的对话框工程添加WM_CTLCOLOR消息,并在它的处理函数中加上一行代码:

HBRUSH CMmDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
 
 // TODO: Change any attributes of the DC here
 if(!DrawOnTitle()) AfxMessageBox("绘图失败");    //加入这行
 // TODO: Return a different brush if the default is not desired
 return hbr;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值