博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC++中对话框界面重绘1-概述
阅读量:4593 次
发布时间:2019-06-09

本文共 1278 字,大约阅读时间需要 4 分钟。

去年那会对MFC中对话框重绘进行了简单的了解,后来一直没有时间写,刚好现在有了博客园的自己博客,就在此写写,主要是实现对话框界面的重新自定义绘制,主要包括标题栏的重绘、对话框边框的重绘、对话框背景重绘、以及最小化按钮、最小化按钮和关闭按钮等的重绘实现,实现的编程平台是基于Microsoft Visual Studio 2008 集成开发环境,编程语言使用C++ 。源代码会在最后给出下载地址哈。好了,废话不说 ,切入正题!

在对话框重绘中,使用的主要技术有两个,一个是绘制对话框的背景位图,在对话框大学改变时能够输出位图,使位图能够适应对话框的大小。另一个是在对话框的指定区域输出位图。

1。绘制对话框的背景位图

绘制对话框背景位图本文采用的是处理对话框的WM_PAINT消息,该消息初始化时候对对话框进行绘制,从而绘制背景位图。绘制背景位图的主要代码如下:

CRect   rect;

    CPaintDC   dc(this);

    GetClientRect(&rect); //获取客户区 

//设置对话框背景颜色       

dc.FillSolidRect(rect,RGB(14,94,157));   //设置为窗口背景

2.在指定的区域中输出位图

为了能够在指定的区域中输出位图,需要使用设备上下文CDC类的StretchBlt方法。由于我们需要在窗口的非客户区域绘制位图,因此需要使用CWindowDC类的StretchBlt方法, CWindowDC类派生与CDC类,它提供了在窗口非客户区域绘制位图的功能。该方法数从源矩形中复制一个位图到目标矩形,必要时按目前目标设备设置的模式进行图像的拉伸或压缩。输出位图的主要实现代码如下:

    CRect winRC;

    CDC* pDC=GetWindowDC();//获取窗口设备上下文

    CDC memDC;

    memDC.CreateCompatibleDC(pDC);//创建兼容内存位图

    BITMAPINFO bmpInfo;

    CBitmap bmp;    //定义位图对象

    GetWindowRect(&winRC);

    bmp.LoadBitmap(nID);//加载位图

    bmp.GetObject(sizeof(BITMAPINFO),&bmpInfo);//获取位图信息

    int nBmpCX = bmpInfo.bmiHeader.biWidth;//获取位图宽度

    int nBmpCY = bmpInfo.bmiHeader.biHeight;//获取位图高度

    memDC.SelectObject(bmp);//选中位图对象

    pDC->StretchBlt(x,y,w,h,

        &memDC,0,0,nBmpCX,nBmpCY,SRCCOPY);//在窗口中绘制位图

    bmp.DeleteObject();//释放位图对象

ReleaseDC(pDC);//释放DC

 

转载于:https://www.cnblogs.com/JczmDeveloper/archive/2013/03/17/2964923.html

你可能感兴趣的文章
pb开发的客户端,使用oracle 9i客户端 提示oci.dll could not be loaded
查看>>
wordpress调用指定post type文章怎么操作
查看>>
magento开发手册之目录结构
查看>>
换个红圈1微信头像恶搞一下好友
查看>>
javascript学习_廖大_20170218
查看>>
bzoj2038: [2009国家集训队]小Z的袜子(hose) 莫队
查看>>
火车头采集基本使用
查看>>
MYSQL中插入数据以及修改数据的部分方法
查看>>
unity中遍历动画得到动画名字和动画数量
查看>>
调整WebLogic的时间
查看>>
Linux学习笔记总结--配置iptables防火墙
查看>>
win10 安装mysql
查看>>
SQL文 Update From 写法
查看>>
pyc文件的本质
查看>>
洛谷 - P2602 - 数字计数 - 数位dp
查看>>
android 环境配置 与 运行错误
查看>>
POJ 2653
查看>>
余承东:未来5年中国大部分智能手机厂商消失
查看>>
Android中个人推崇的数据库使用方式
查看>>
关于H.264 x264 h264 AVC1
查看>>