基于对话框的程序写好后,为对话框贴上个图片让界面更加美观(我承认做界面,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>
}
}

最新文章

  1. React-Native 给客户端来个「同音词模糊搜索」
  2. 自定义getElementByClass
  3. nginx log的json格式:
  4. 缓存插件 Spring支持EHCache缓存
  5. linux apache 配置fastcgi
  6. plateform_driver_register和plateform_device_register区别
  7. Android Handler传递参数动态更新UI界面demo
  8. 搭建PHP开发环境 apache+MySQL+PHP 安装phpMyAdmin模块
  9. libiconv的静态编译
  10. 把虚拟机中的Linux系统安装到U盘中
  11. HTML5程序设计 Canvas API
  12. stray &#39;/241&#39; in program 错误
  13. django Form组件 上传文件
  14. laravel5.6中jquery+ajax分页
  15. day 0308 编码的进阶 文件操作
  16. kbmMWLog同时输出日志到多个日志管理器
  17. 下载并安装oracle 11g客户端
  18. What Your Computer Does While You Wait.CPU的等待有多久?
  19. C++中,关于#include&lt;***.h&gt;和#include&quot;***.h&quot;的区别
  20. electron_window 创建窗口

热门文章

  1. display:inline-block的空白bug问题
  2. SQL Server 数据库基础编程
  3. Linux下切换用户
  4. 006NFS与TFTP服务器
  5. Windows Phone 显示长文本
  6. jquery 读取xml
  7. 使用C#中JavaScriptSerializer类将对象转换为Json格式数据
  8. 【转】src与href属性的区别
  9. 利用js+canvas实现的时钟效果图
  10. swiper 页面双向设置