添加背景图片.doc_第1页
添加背景图片.doc_第2页
添加背景图片.doc_第3页
添加背景图片.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

vc+如何给窗体添加背景图片?VC是一个功能强大的可视化的开发工具,但是用VC做的标准界面与Windows一样色彩灰暗单调,例如多文档窗口应用程序中的主框架窗口的背景便是如此。那么能否给主框架窗口的背景改变一下色彩或是给主框架窗口加上一幅漂亮的图片做背景?其实也不难。但与单文档窗口应用程序中改变框架窗口的背景方法不同,对多文档窗口应用程序中的主框架窗口改变背景不能简单地用ClassWizard重载OnEraseBkgnd(CDC pDC)函数的方法实现。因为多文档窗口应用程序中的主框架窗口的背景区是一个MDIClient类的窗口,因此改变背景与这个MDIClient类的窗口有关。MDIClient类的窗口的句柄是m_hWndMDIClient(在CMDIFrameWnd中)。以下是其实现的步骤: 一、 使用MFC AppWizard向导创建一个多文档窗口应用程序 1、在VC的“File”菜单中单击New,弹出一“New”对话框。在“Projects”页中选择“MFC AppWizard exe”,在“Project name”编辑框中输入“DrawBackground”,按OK按钮,退出“New”对话框。 2、在“MFC AppWizard step 1”对话框到“MFC AppWizard step 6”对话框中选择默认选项,按Finish按钮即完成多文档窗口应用程序的定制。 注:MFC(Microsoft Foundation Class)是MSVisual C的类库。 二、向应用程序添加位图 在VC的“View”菜单中单击“Resource Includes.”, 在弹出对话框中选择“Bitmap”, 按Import按钮从文件中加载位图文件,单击“Workspace”的“Resource”便可见到刚才加载的位图文件,默认的资源标识符为IDB_BITMAP1。 三、用ClassWiard生成一个 CWnd 类的派生类CclientWnd 在CclientWnd类中重载OnEraseBkgnd(CDC pDC),OnSize(UINT nType, int cx, int cy)函数,并用手工加入重载的虚函数WNDPROC CClientWnd:GetSuperWndProcAddr()用来返回函数指针。 类CclientWnd的头文件代码如下: class CClientWnd : public CWnd / Construction public: CClient(); / Attributes public: / Operations public: / Overrides / ClassWizard generated virtual function overrides file:/AFX_VIRTUAL(CClientWnd) public: virtual WNDPROC GetSuperWndProcAddr(); file:/AFX_VIRTUAL / Implementation public: virtual CClientWnd(); / Generated message map functions protected: file:/AFX_MSG(CClientWnd) afx_msg BOOL OnEraseBkgnd(CDC pDC); afx_msg void OnSize(UINT nType, int cx, int cy); file:/AFX_MSG DECLARE_MESSAGE_MAP() ; 类CclientWnd的实现文件代码如下: / CClientWnd message handlers 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_BITMAP1); / 从资源加载位图 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); / 取得客户区的大小 / 从内存向屏幕复制位图对象 pDCStretchBlt(rectbk.left,rectbk.top,rectbk.Width(), rectbk.Height(),dcMen,0,0,bmsize.cx,bmsize.cy,SRCCOPY); dcMen.SelectObject(pold); / 恢复旧的位图对象 dcMen.DeleteDC();/ 释放内存设备描述表 return true; WNDPROC CClientWnd:GetSuperWndProcAddr() static WNDPROC NEAR pfnSuper = NULL; return pfnSuper; / 返回函数指针 void CClientWnd:OnSize(UINT nType, int cx, int cy) CWnd:OnSize(nType, cx, cy);/ TODO: Add your message handler code here file:/重画窗口Invalidate(); 四、修改CMainFrame类 在CMainFrame类中定义一个CClientWnd 类的成员变量m_wndClient,并在CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)函数中把m_wndClient子类化为主框架窗口的客户窗口。代码如下: 在MainFrm.h 中加入: include ClientWnd1.h class CMainFrame : public CMDIFrameWnd private: CClientWnd m_wndClient; MainFrm.cpp 中加入代码如下: int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct) if (CMDIFrameWnd:OnCreate(lpCreateStruct) = 1) return 1; file:/把m_wndClient子类化为主框架窗口的客户窗口 if(!m_wndClient.SubclassWindow(m_hWndMDIClient) TRACE(Fail to subclass MDI client windown); return 1; 五、关键技术 1、本程序并不复杂,关键是要知道多文档窗口应用程序中的主框架窗口的背景区是一个MDIClient类的窗口。 2、选用函数要正确,如CClientWnd:OnEras

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论