MFC 对话框添加背景图片详细过程(两种方法)
给对话框添加背景图片方法很多,在此贴出两种很常见的方法。一种是通过读取位图资源显示位图(BitMap)
step:
1、创建内存设备上下文;
2、选择位图,将其装入内存设备上下文;
3、使用BitBlt()函数从内存设备上下文中把位图拷贝到输出设备上下文中显示;
PS:此处要特别说明一下BitBlt()函数,很重要的一个函数,必须记住
BOOL BitBlt(int x, //目标矩形的左上角X坐标,即你要让位图从界面的什么地方开始显示的X坐标int y,//目标矩形的左上角Y坐标,即你要让位图从界面的什么地方开始显示的Y坐标int nWidth, //目标矩形的宽度,但本人觉得此处写位图的宽度也是一样,因为只是拷贝,没有伸缩int nHeight, //目标矩形的高度,但本人觉得此处写位图的高度也是一样,因为只是拷贝,没有伸缩CDC* pSrcDC,//源位图设备int xSrc,//位图资源的起点X坐标int ySrc, //位图资源的起点Y坐标DWORD dwRop//光栅操作码);
此处再说明另一个接口StretchBlt(),可伸缩位图以此来达到全部显示到用户指定的空间中
BOOL StretchBlt(int x, //同上int y, //同上int nWidth,//这里就要写客户端的宽度了,因为位图伸缩到此处设置的宽度里int nHeight,//这里就要写客户端的高度了,因为位图伸缩到此处设置的高度里CDC* pSrcDC,//同上int xSrc, //位图起点X坐标int ySrc,//位图起点Y坐标int nSrcWidth, //位图宽int nSrcHeight, //位图高DWORD dwRop//光栅操作码);
OK。。说完这两个函数,接下来说第一种添加背景图片方法:
1、Resource View中xxx.rc右击,选择Add Resource,选中BitMap,点击Import,然后选择一张.bmp的图片导入,此时就完成了位图资源的插入,并且有一个对应的ID。
2、在OnPaint()中的else中插入如下代码,切记,必须将CDialogEx::OnPaint()去掉
//CDialogEx::OnPaint();CPaintDC dc(this);CRect rect; GetClientRect(&rect); //得到客户端的大小; CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP1); //IDB_BITMAP1是你自己的图对应的IDBITMAP bitmap; bmpBackground.GetBitmap(&bitmap); //得到位图信息CDC dcMem; dcMem.CreateCompatibleDC(&dc);//创建内存DC;CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground); //选择位图,将其装入内存设备上下文;//使用BitBlt()函数从内存设备上下文中把位图拷贝到输出设备上下文中显示,//下边两个实现结果一样,所以本人觉得第3和4参数设为位图宽和高也行;//dc.BitBlt(0,0, bitmap.bmWidth,bitmap.bmHeight,&dcMem,0,0,SRCCOPY);dc.BitBlt(0,0, rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);dcMem.SelectObject( pbmpOld );//将原来的位图重新载入dcMem.DeleteDC();//删除内存DC
以上就是第一种方法显示对话框背景图片,接下来是第二种方法:通过读取位图文件显示位图,方法和上边大同小异,只是上边事先插入资源,然后用资源ID来显示,而现在是通过读取位图文件而已,不同的地方是:
1、不需要去插入资源,所以,LoadBitmap(IDB_BITMAP1)就没用了,而是用下边方法代替:
HBITMAP hBitMap = (HBITMAP)::LoadImage( NULL, _T("res\\desk.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); bmpBackground.Attach(hBitMap);
2、此时bmpBackground.GetBitmap(&bitmap);也就不对了,而应该是:
bmpBackground.GetObject(sizeof(bitmap), &bitmap);
剩下的一样。这就是一般给对话框加背景图片的两种方法。
加载完成后发现图片有的太小,占不满整个对话框,或者图片太大,客户端装不下,解决办法就是用上边说明的第二个函数了,而不用第一个了,因为BitBlt只是拷贝,不带伸缩功能,将BitBlt()换成如下方法即可:
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
PS:
此处用的CPaintDC dc(this); 可能有的人会用CWindowsDC dc(this);如果用WindowsDC的话,那么目标矩形区域的起点包括标题栏的,也就是说0,0点在整个对话框的的左上角,也就是说贴出来的背景图有一部分是被标题栏挡住的。
MFC 对话框添加背景图片详细过程(两种方法)相关推荐
- c语言mfc怎么插入背景图片,MFC 对话框添加背景图片详细过程(两种方法)
给对话框添加背景图片方法很多,在此贴出两种很常见的方法.一种是通过读取位图资源显示位图(BitMap) step: 1.创建内存设备上下文: 2.选择位图,将其装入内存设备上下文: 3.使用BitBl ...
- 如何给MFC对话框添加背景图片
一.创建项目 文件-新建项目-MFC应用程序-该页面使用"基于对话框"-完成即可. 注意:取消"使用Unicode库",否则在使用AfxMessageBox会报 ...
- 在VS2013环境下MFC学习:给对话框添加背景图片
步骤1 添加资源 先右击工程名.rc(我的是PlaneDiag_Demo_MFC),再点击"添加资源" 步骤2 导入BMP图像 进入"添加资源"界面后,点击资源 ...
- 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 ...
- 给对话框添加背景图片
给对话框添加背景图片 1 . 把你的图包含到程序的 "Bitmap 资源 " 里,提示说该资源使用了大于 256 色的调色板,在 VC 里无法编辑等等,点确定就可以 2 ...
- qt 加载 图片旋转_QT 实现图片旋转的两种方法
第一种方案 使用 QPixmap 的 transformed 函数来实现旋转,这个函数默认是以图片中心为旋转点,不能设置旋转的中心点,使用如下: QMatrix matrix; matrix.rota ...
- java 图片压缩100k_Java 实现图片压缩的两种方法
问题背景. 典型的情景:Nemo社区中,用户上传的图片免不了要在某处给用户做展示. 如用户上传的头像,那么其他用户在浏览该用户信息的时候,就会需要回显头像信息了. 用户上传的原图可能由于清晰度较高而体 ...
- excel日历弄到html,Excel中进行添加日历控件的两种方法
有时我们在运用Excel表格的时候会运用到日历的控件,可是小伙伴们却不知道在哪里添加.那么我们来看一下,它到底躲藏在哪里,又该怎么添加呢?今天,学习啦小编就教大家在Excel中进行添加日历控件的两种方 ...
- android 图片叠加xml,Android实现图片叠加效果的两种方法
本文实例讲述了Android实现图片叠加效果的两种方法.,具体如下: 效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: public void first(View v) { // ...
最新文章
- oracle 游标中抛出异常的处理方式
- 实现手机左右滑屏效果
- PowerBI Report Server 自定义视图无法显示故障解决
- 25 款软件上榜,2020“最佳开源奖” 出炉!
- C# 简单日志文本输出
- Java实现二分查找法
- php pdf添加水印图片,php pdf添加水印(中文水印,图片水印)
- 跟据URL来实现WebService
- word文档如何去掉光标
- Brunei Shell Marketing (BSM)选择P97的PetroZone(R)为文莱36个加油站提供壳牌驾驶者应用
- 微信公众号推送天气教程,自动定时推送【Java版】开发者和小白详细教程
- 免费蹭WIFI要小心 别让你的账号“裸奔”
- Linux进程信号(产生、保存、处理)/可重入函数概念/volatile理解/SIGCHLD信号
- 一键安装java程序_一键配置java环境工具
- 定了!考研人务必抓紧!2023考研全程资料免费分享微信大群!全网开启!
- hive:创建udf函数过滤emoji表情等特殊字符
- 【工具推荐】2022博客写作工具流指南
- Java中当被除数比除数小时为什么计算结果都为0?
- Ableton Max for Live Collection ALP 音频MIDI效果合成控制设备拓展合集
- TCP_CA_Open状态到TCP_CA_CWR状态