Windows开发进阶之VC++中如何实现对话框的界面重绘

概述

应用程序界面是用户与应用程序之间的交互的桥梁和媒介,用户界面是应用程序中最重要的组成部分,也是最为直观的视觉体现。对用户而言,界面就是应用程序,界面设计的好坏,会直接影响应用程序的可用性,从而影响用户的体验。 在软件开发过程中,对界面的设计椅子都是一项很重要的技术,如今的应用软件界面可谓是“丰富多彩、美丽绝伦”,如大家熟悉的360安全卫士、腾讯QQ聊天软件、Visual C++ 编程词典软件等,都是非常不同于普通的对话框应用程序,因为他们的界面都是重新绘制过的,从而实现了漂亮、易用的用户体验。鉴于VC++编程技术,本文将通过对对话框的重新绘制来达到自定义的界面效果。

详细

代码下载:Windows开发进阶之VC++中如何实现对话框的界面重绘

一、概述

1 引言:

应用程序界面是用户与应用程序之间的交互的桥梁和媒介,用户界面是应用程序中最重要的组成部分,也是最为直观的视觉体现。对用户而言,界面就是应用程序,界面设计的好坏,会直接影响应用程序的可用性,从而影响用户的体验。

在软件开发过程中,对界面的设计椅子都是一项很重要的技术,如今的应用软件界面可谓是“丰富多彩、美丽绝伦”,如大家熟悉的360安全卫士、腾讯QQ聊天软件、Visual C++ 编程词典软件等,都是非常不同于普通的对话框应用程序,因为他们的界面都是重新绘制过的,从而实现了漂亮、易用的用户体验。鉴于VC++编程技术,本文将通过对对话框的重新绘制来达到自定义的界面效果。

2 方案概述:

本文的主要是实现对话框界面的重新自定义绘制,主要包括标题栏的重绘、对话框边框的重绘、对话框背景重绘、以及最小化按钮、最小化按钮和关闭按钮等的重绘实现。

二、编程平台技术实现原理方案设计及过程

1 编程平台与技术:

本文实现的编程平台是基于Microsoft Visual Studio 2008 集成开发环境,编程技术采用Visual C++ 编程技术,以及相关的开发软件如Photoshop CS5等。

2 方案分析:

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

2.1绘制对话框的背景位图

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

1

2

3

4

5

CRect   rect;

    CPaintDC   dc(this);

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

//设置对话框背景颜色      

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

2.2在指定的区域中输出位图

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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

3 方案设计与实现:

3.1方案的整体设计

对界面的整体重绘包括两部分,一部分是对话框自身的重绘,二是对话框控件的重绘,本文主要介绍按钮控件的重绘。

3.2对话框绘制的实现

在对话框重绘设计与实现过程中,一般需要绘制的对话框区域主要有标题部分、边框部分和客户区部分。具体的区域划分如图1所示。

图1 对话框绘制区域图

既然要对多个区域进行位图显示输出,所以我们先封装一个bmp位图显示输出函数如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

void CCTestDlg::ShowBmp(int x,int y,int w,int h,int nID)

{ //nID 表示位图资源的ID

    CRect winRC;

    CDC* pDC=GetWindowDC();

    CDC memDC;

    memDC.CreateCompatibleDC(pDC);

    <

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一对一答疑的编程作家朱文伟

谢谢大爷谢谢大爷谢谢大爷谢谢大

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值