已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
为VC MDI主窗口程序加背景图VC是一个功能强大的可视化的开发工具,但是用VC做的标准界面与Windows一样色彩灰 暗单调,例如多文档窗口应用程序中的主框架窗口的背景便是如此。那么能否给主框架窗 口的背景改变一下色彩或是给主框架窗口加上一幅漂亮的图片做背景?其实也不难。但与 单文档窗口应用程序中改变框架窗口的背景方法不同,对多文档窗口应用程序中的主框架 窗口改变背景不能简单地用ClassWizard重载OnEraseBkgnd(CDC pDC)函数的方法实现。 因为多文档窗口应用程序中的主框架窗口的背景区是一个MDIClient类的窗口,因此改变背 景与这个MDIClient类的窗口有关。MDIClient类的窗口的句柄是m_hWndMDIClient(在CMDI FrameWnd中)。以下是其实现的步骤: 一、 使用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.”, 在弹出对话框中选择“Bitm ap”, 按Import按钮从文件中加载位图文件,单击“Workspace”的“Resource”便可 见到刚才加载的位图文件,默认的资源标识符为IDB_BITMAP1。 三、用ClassWiard生成一个 CWnd 类的派生类CclientWnd 在CclientWnd类中重载OnEraseBkgnd(CDC pDC),OnSize(UINT nType, int cx, in t 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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 毕业论文的结构与格式要求重要部分的写作指南
- 工商管理硕士(MBA)研究生手册
- 临床试验药房管理合规标准
- 物资采购管理工作总结及工作计划7
- 科研指导老师评语
- 会计学方面的论文题目有哪些
- 法纪安全教育论文1500字内容怎么写
- 乡村振兴存在的主要问题原因及对策
- 参考文献著录标准及格式-论文格式-
- 产品全寿命周期成本管理-成本管理的新视角
- 大跨度钢结构厂房吊装方案
- 2025年挖掘机驾驶员岗位招聘面试参考试题及参考答案
- 2025年中央八项规定精神学习教育题库及答案
- 福建省福州市【统招专升本】计算机真题(含答案)
- 慢性心力衰竭患者姑息治疗与安宁疗护方案
- 2025内蒙古巴彦淖尔市交通投资(集团)有限公司(第二批)招聘40人笔试考试参考试题及答案解析
- 广东信息技术考试题目及答案
- 雨课堂学堂云在线《中国话剧名作鉴赏(大庆师院 )》单元测试考核答案
- 宠物直播带货案例分析-洞察及研究
- 江西铜业校招笔试题及答案
- 大一会计考试试题及答案
评论
0/150
提交评论