VC—主框架窗口绘制背景

原创 2007年10月05日 18:57:00

使用VC进行项目开发,特别是简单的MIS系统开发中,通常在用户没有进行操作之前显示的是主框架的窗口(用户点击操作菜单项再弹出处理窗口)。因此给主框 架窗口提供一个背景图片就显得很有必要(例如一用户满意的LOGO等)。但是对于主框架的背景的绘制不能简单地用ClassWizard重载 OnEraseBkgnd(CDC* pDC)函数的方法实现。

多文档窗口应用程序中的主框架窗口的背景区是一个MDIClient类的窗口,因此改变背 景与这个MDIClient类的窗口有关。MDIClient类的窗口的句柄是m_hWndMDIClient(在CMDIFrameWnd中),可以通 过以下步骤实现:

Step 1:在资源中添加一个Bitmap资源,资源标志符为IDB_BKGOUND;
Step 2:添加一个MDIClient类:Insert——>New Class,选择MFC Class,基类选择"generic CWnd",类名为CClientWnd;
Step 3:为CClientWnd添加OnEraseBkgnd(CDC* pDC)(WM_ERASEBKGND),OnSize(UINT nType, int cx, int cy)(WM_SIZE)函数的重载(Class Wizard),并添加虚函数WNDPROC* CClientWnd::GetSuperWndProcAddr():

BOOL CClientWnd::OnEraseBkgnd(CDC* pDC)

{
// TODO: Add your message handler code here and/or call default
CRect rectbk; // 客户区的大小
CDC dcMen; //内存设备描述表
CBitmap bmbk; // 位图对象
bmbk.LoadBitmap(IDB_BKGOUND); // 从资源加载位图 bitmap
// 得到位图bitmap的大小
BITMAP stBitmap;
bmbk.GetObject(sizeof(BITMAP),&stBitmap);
CSize bmsize(stBitmap.bmWidth,stBitmap.bmHeight);
dcMen.CreateCompatibleDC(pDC);
// 选入新的位图对象并保存旧的位图对象
CBitmap *pold=dcMen.SelectObject(&bmbk);
GetClientRect(&rectbk);
// 从内存向屏幕复制位图对象
pDC->StretchBlt(rectbk.left,rectbk.top,rectbk.Width(),rectbk.Height(),&dcMen,0,0,bmsize.cx,bmsize.cy,SRCCOPY);
dcMen.SelectObject(pold);
// 恢复旧的位图对象
dcMen.DeleteDC();
// 释放内存设备描述表
//return CWnd::OnEraseBkgnd(pDC);
return TRUE;
}

void CClientWnd::OnSize(UINT nType, int cx, int cy)
{
CWnd::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
Invalidate(); //大小改变后重画
}

ClientWnd.h中添加:
virtual WNDPROC* GetSuperWndProcAddr();
ClientWnd.cpp中添加:
WNDPROC* CClientWnd::GetSuperWndProcAddr()
{
static WNDPROC NEAR pfnSuper = NULL;
return &pfnSuper; // 返回函数指针
}


Step 4:为主框架添加背景:
在MainFrm.h中添加:CClientWnd m_wndClient; (添加#include"ClientWnd.h"头文件)

在CMainFrame类的OnCreate()事项中添加:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if(!m_wndClient.SubclassWindow(m_hWndMDIClient))//该句为加入
{
TRACE("Fail to subclass MDI client window/n");
return -1;
}
//////省略

 

VC—主框架窗口绘制背景

  • 2011年04月26日 22:41
  • 28KB
  • 下载

VC—主框架窗口绘制背景

VC—主框架窗口绘制背景  转自skyremember的专栏使用VC进行项目开发,特别是简单的MIS系统开发中,通常在用户没有进行操作之前显示的是主框架的窗口(用户点击操作菜单项再弹出处理窗口)。因此...
  • adermxl
  • adermxl
  • 2011年04月22日 16:15
  • 395

VC—主框架窗口绘制背景

VC—主框架窗口绘制背景  转自skyremember的专栏使用VC进行项目开发,特别是简单的MIS系统开发中,通常在用户没有进行操作之前显示的是主框架的窗口(用户点击操作菜单项再弹出处理窗口)。因 ...

主框架窗口绘制背景

  • 2007年05月17日 19:54
  • 35KB
  • 下载

MDI应用的主框架窗口背景设置

在使用VC6.0/5.0的AppWizard生成MDI应用的时候,我们发现MDI主窗口的客 户区背景千篇一律的是深灰的。VC6.0/5.0并没有提供修改其背景色的方法。甚 至使用SDK编程也没...

VC编程小技巧之框架窗口及其他

1.修改主窗口风格 AppWizard生成的应用程序框架的主窗口具有缺省的窗口风格,比如在窗口标题条中自动添加文档名、窗口是叠加型的、可改变窗口大小等。要修改窗口的缺省风格,需要重载CWnd::Pr...
  • B_H_L
  • B_H_L
  • 2012年07月04日 10:51
  • 833

深入剖析WTL—WTL框架窗口分析

WTL的基础是ATL。WTL的框架窗口是ATL窗口类的继承。因此,先介绍一下ATL对Windows窗口的封装。 由第一部分介绍的Windows应用程序可以知道创建窗口和窗口工作的逻辑是: ...
  • zcxin
  • zcxin
  • 2013年10月23日 01:42
  • 1415

mfc学习之主框架窗口创建过程

在上一篇追踪了mfc程序流程之后回到了自己所写的初始化函数 BOOL CMyWinApp::InitInstance() { CMyFrameWnd * pFrame = new CMyFrame...

通过进程名获取主框架窗口句柄

转自:http://my.csdn.net/tudou23115/code/detail/21236 #include "tchar.h" #include #include #includ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC—主框架窗口绘制背景
举报原因:
原因补充:

(最多只允许输入30个字)