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)是MS-VisualC++的类库。二、向应用程序添加位图在VC的“View”菜单中单击“Resource Includes...”,在弹出对话框中选择“Bitmap”,按[Import]按钮从文件中加载位图文件,单击“Workspace”的“Resource”便可见到刚才加载的位图文件,默认的资源标识符为IDB_BITMAP1。三、用ClassWiard生成一个CWnd类的派生类CclientWnd在CclientWnd类中重载OnEraseBkgnd(CDC*pDC),OnSize(UINTnType, 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_msgBOOL OnEraseBkgnd(CDC*pDC);afx_msgvoid 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);

//取得客户区的大小//从内存向屏幕复制位图对象pDC->StretchBlt(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 herefile://重画窗口Invalidate();}四、修改CMainFrame类在CMainFrame类中定义一个CClientWnd类的成员变量m_wndClient,并在CMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct)函数中把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 window\n");

return-1;}}五、关键技术1、本程序并不复杂,关键是要知道多文档窗口应用程序中的主框架窗口的背景区是一个MDIClient类的窗口。2、选用函数要正确,如CClientWnd::OnEraseBkgnd(CDC*pDC)函数中选用GetClientRect(&rectbk)函数来取得客户区的大小要比选用GetClipBox(&rectbk)函数来得好。3、要在CclientWnd类中重载OnSize(UINT nType, int cx, int cy)函数,并加入Invalidate()函数重画窗口。

怎么换c语言程序窗口背景图,vc++如何给窗体添加背景图片相关推荐

  1. php添加背景图及设置格式,PHP添加PNG图片背景透明水印操作类定义与用法示例

    本文实例讲述了PHP添加PNG图片背景透明水印操作类定义与用法.分享给大家供大家参考,具体如下: 图片相关操作类 class ImageTool { private $imagePath;//图片路径 ...

  2. 如何给HTML文件加一张背景图,如何在css中添加背景图?

    在前端开发过程中,为了页面的美观,往往都会给html页面添加背景图片.那么如何利用css设置html中用图片做背景?本章就给大家介绍css怎样设置背景图片. css background属性就是专门设 ...

  3. 直播间背景图怎么设计?直播间背景设计软件分享。​

    直播间背景图怎么设计?直播间背景是指直播时所展示的背景墙或屏幕,通常用于营造氛围和增强视觉效果.在直播中,背景可以承载主播个人风格.节目内容.品牌形象等信息,同时也是吸引观众注意力和提高观看体验的重要 ...

  4. Form窗体添加背景图片

    paip.提升用户体验-------在C++ Builder 中为Form窗体添加背景图片 paip.在C++ Builder 中为Form窗体添加背景图片 Form窗体添加背景图片,一般好几种方法: ...

  5. java 窗体添加背景图片_Java Swing实现窗体添加背景图片的2种方法详解

    本文实例讲述了java Swing实现窗体添加背景图片的2种方法.分享给大家供大家参考,具体如下: 在美化程序时,常常需要在窗体上添加背景图片.通过搜索和测试,发现了2种有效方式.下面分别介绍. 1. ...

  6. VC中为对话框添加背景图片

    From: http://blog.ezcn8.com/2011/06/11/vc%E4%B8%AD%E4%B8%BA%E5%AF%B9%E8%AF%9D%E6%A1%86%E6%B7%BB%E5%8 ...

  7. 浩辰CAD看图王手机版中添加的图片批注在电脑端如何查看?

    在使用CAD看图软件浩辰CAD看图王APP中批注功能的过程中,有时候为了CAD图纸能更清晰的展示,会需要在批注的时候插入图片说明,所以说特定场合下需要用电脑端打开,应该如何查看在手机中添加的图片批注呢 ...

  8. c语言程序申请管理员权限,vc 软件 要管理员运行 vc 管理员权限运行

    运行visual c++6.0 时,出现 "应用程序无法正常启动(0xc00001420... 下载安装vc++6.0. 安装完成后,选中左面的vc++6.0,右键点击属性,点击顶端的快捷方式,点击右 ...

  9. python窗体加背景图_第二十三篇 -- 为窗体添加背景图片和图标以及设置窗体透明度...

    效果图: play.py #!/usr/bin/env python#_*_ coding: UTF-8 _*_ """========================= ...

  10. 怎么更换vscode背景图,放入自己喜欢的图片

    安装background插件 vscode插件市场下载插件 然后配置 这里配置给大家 // 是否开启背景图显示"background.enabled": true,// true- ...

最新文章

  1. React编写一个简易的评论区组件
  2. windows查看端口占用 windows端口占用 查找端口占用程序 强制结束端口占用 查看某个端口被占用的解决方法 如何查看Windows下端口占用情况...
  3. oracle 截取字符串中指定位置_手撕虚拟内存(1)——字符串在虚拟内存中的段位置与/proc虚拟文件系统...
  4. 手工编译Android程序
  5. 非负矩阵分解中基于L1和L2范式的稀疏性约束
  6. axis2创建web service
  7. 嵌套套娃,MySQL子查询,单行与多行子查询,相关和不相关(关联)子查询,完整详细可收藏
  8. C++(22)--继承和派生
  9. lammps计算聚合物例子_LAMMPS模拟聚合物结构,非晶态聚合物变形行为的模拟,纳米线变形模拟,单轴张力模拟,晶格参数计算...
  10. OpenStack的八年之痒
  11. ExecuteNonQuery()的返回值
  12. webservice 调用错误
  13. STM32F103 与 STM32F207/407编程的区别自我总结
  14. AutoCAD2010安装教程
  15. 量化套利策略|套利策略的原理
  16. OpenHarmony命令行调试工具hdc_std介绍
  17. 以技术入股物流细分领域,是对赌还是协同发展?--专访握物流CEO欧阳铭
  18. 计算机内存条如何区分频率,怎么看内存条频率,详细教您怎么看内存条频率
  19. Spring @Value读取系统环境变量
  20. Hibernate与JPA的区别是什么

热门文章

  1. Windows:无须再忍,Microsoft Store下载慢/加速/更快,不摘抄(2022新)
  2. 《杂记》- 之- 使用windows终端命令查看文件的MD5
  3. 6月读书《有效的管理者》笔记
  4. 虚幻4——实时渲染学习笔记
  5. vb.net教程 3-1 窗体编程基础 1
  6. Xweibo for Discuz!X1.5V1.1安装教程
  7. 引入Google新技术 Picasa2发布
  8. 4 配置端口聚合提供冗余备份链路
  9. ping C语言实现
  10. Win10系统优化工具