在MDI主框架窗口中添加位图(转载自CSDN VC编程知识总结)

在MDI主框架窗口中添加位图(注意,不是在单个视中):
首先要清楚对于一个MDI应用程序的主框架窗口来说包含一个特殊的子窗口称为MDICLIENT窗口,应用程序的主框架类中有一个成员变量m_hWndMDIClient 指的就是MDICLIENT窗口。MDICLIENT窗口负责管理主框架窗口的客户区,对MDI客户窗口编程有一定的难度。原因是MDIFrameWnd的客户区完全被MDICLIENT窗口覆盖掉了。这样,MDI主窗口类MDIFrameWnd的背景色和光标都不起作用。同时,微软并不支持将MDICLIENT窗口作为子类,MDICLIENT窗口只能使用标准的背景色和光标。所以,对MDI客户窗口编程不能象对普通窗口那样简单地重载WM_PAINT的消息处理函数。我们可以在主框架窗口截获关于MDICLIENT窗口的重画消息,然后加入自己设计的代码。我用PreTranslateMessage(MSG* pMsg) 截获MDI客户窗口WM_PAINT消息,在这个函数中向主框架窗口发送WM_PAINT消息,在该消息的处理函数中实现彩色位图的显示。我的具体实现如下:1、向程序添加256色彩色位图资源,命名为IDB_BITMAP1;2、用ClassWizard向主框架类添加函数CMainFrame::PreTranslateMessage(MSG* pMsg);3、用ClassWizard向主框架类添加函数CMainFrame::OnPaint();现给出两个函数的实现:

BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 
{
 // TODO: Add your specialized code here and/or call the base class
 if(pMsg->hwnd==m_hWndMDIClient && pMsg->message==WM_PAINT)
  PostMessage(WM_PAINT);
  return CMDIFrameWnd::PreTranslateMessage(pMsg);
 }

 void CMainFrame::OnPaint() 
 { 
  CDC dc, memdc;
  dc.m_hDC=::GetDC(this->m_hWndMDIClient);
  CRect rect;
  CBitmap bitmap;
  BITMAP szbitmap;
  bitmap.LoadBitmap(IDB_BITMAP1);
  bitmap.GetObject(sizeof(BITMAP),&szbitmap);
  CSize size(szbitmap.bmWidth,szbitmap.bmHeight);
  memdc.CreateCompatibleDC(&dc);
  CBitmap *oldbitmap=memdc.SelectObject(&bitmap);
  GetClientRect(&rect);
  StretchBlt(dc.m_hDC,0,0,rect.Width(),rect.Height(),
       memdc.m_hDC,0,0,size.cx,size.cy,SRCCOPY);
  memdc.SelectObject(oldbitmap);
  memdc.DeleteDC();
  dc.DeleteDC();
  CMDIFrameWnd::OnPaint();
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值