VC++编程之对话框贴图
来源:互联网 发布:这个杀手不太冷 知乎 编辑:程序博客网 时间:2024/06/05 17:23
基于对话框的程序写好后,为对话框贴上个图片让界面更加美观(我承认做界面,MFC显得力不从心,不如QT)。
其实很简单,我们以位图为例,选好我们需要的位图资源(bmp),假若自己的图片不是位图资源,可以通过一些图片修改软件获得(PS)。打开我们的程序,在资源视图下,右键添加资源,把我们选中的位图导入到编译器中。
然后在C ..DLG类中,在会话(OnPaint)中添加如下代码,解释下原因:在对话框建立是,会调用绘画函数,此时我们在此函数中禁用默认的重绘基类,使用自己的重绘代码,即可。
运行后就可以看到对话框上贴了一层图片。当然这只是最简单的方法,其间有很多问题,比如说,画面会走形(除非是纯色的图片),控件与贴图不能很好复合(例如静态文本框,看起来很别扭),还有待改进。
添加的代码
void CtestDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else //以上的代码MFC默认的对话框代码,我们在只在下面进行改动{//CDialogEx::OnPaint();//CDialog::OnPaint();//要禁止这个调用 <strong> CPaintDC dc(this); CRect rect; //定义一个矩形 GetClientRect(&rect); //获取对话框的大小 CDC dcMem; //定义一个绘画句柄 dcMem.CreateCompatibleDC(&dc); CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP2); //加载位图资源 //IDB_BITMAP是你自己的图对应的ID BITMAP bitmap; bmpBackground.GetBitmap(&bitmap); CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground); dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0, bitmap.bmWidth,bitmap.bmHeight,SRCCOPY); //函数从源矩形中复制一个位图到目标矩形 //必要时按目标设备设置的模式进行图像的拉伸或压缩</strong>}}
2 0
- VC++编程之对话框贴图
- VC对话框贴图效果实现
- VC编程小技巧之对话框 -------- 转
- VC编程小技巧之对话框
- vc++对话框编程,计算器,
- VC对话框编程知识点
- VC下改变对话框的背景颜色和贴图
- VC/MFC界面美化之贴图
- vc 贴图
- VC贴图
- [Unity3D]Shader编程之贴图切换
- 对话框贴图方法
- 对话框标题栏贴图
- MFC 对话框背景贴图
- MFC 之 对话框编程
- Android编程之对话框
- 孙鑫VC++视频学习笔记之6: 对话框编程(1)
- 孙鑫VC++视频学习笔记之7: 对话框编程(2)
- Oracle 12c 基于ASM 的单实例 搭建手册
- JavaScript示例九(JSON序列化)
- SDRAM内存驱动 的学习
- Simplify Path(leetcode)
- Linux简单命令
- VC++编程之对话框贴图
- error C2653: 'QMessageBox' : is not a class or namespace name
- java判断字符串,为什么用"=="做不了判断,而要用equal()
- string.Template--字符串模板
- leetcode:First Missing Positive
- 关于android webview 调用js
- 数的长度
- Linux系统中的文件目录结构介绍
- org.hibernate.session