基于VC++ PNG按钮的实现【2】

来源:互联网 发布:q系列plc编程 编辑:程序博客网 时间:2024/06/06 01:29

GDI+还将支持其它技术,譬如重新着色、颜色校正、元数据、图形容器.[2][3]

() 编程模式的改变 Device Contexts(设备描述表), Handles(句柄), Graphics Objects(图形对象)

设备描述表是Windows使用的一个数据结构,用于存储具体设备能力和与如何在设备上重绘一些项目的有关属性信息。而且视频设备的设备描述表还与特定的窗口有关。利用GDI+函数,你可以简单地创建一个图形对象(Graphics),然后以你熟悉的面向对象的编程方式调用它的方法即可。Graphics对象是GDI+的核心,设备描述表(DC)和图形对象(Graphics)在不同的环境下扮演着同样的角色,发挥着类似的作用,但是两者也存在着本质的不同。前者使用基于句柄的编程方法而后者使用面向对象的编程方法。

图形对象和设备对象一样,在GDI+中,你只需把这些绘图对象作为一个参数传递给图形对象Graphics方法调用即可,每一个图形对象所使用的绘图工具至于它调用方法使用的参数有关,它可以通过参数使用多种PenBrush绘图,而不是与特定的笔和画刷联系在一起。

GDIGraphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。在Windows操作系统下,绝大多数具备图形界面的应用程序都离不开GDI,我们利用GDI所提供的众多函数就可以方便的在屏幕、打印机及其它输出设备上输出图形,文本等操作。

()GDI是如何实现输出的?

要想在屏幕或者其它输出设备上输出图形或者文字,那么我们就必须先获得一个称为设备描述表( DC:Device Context)的对象的句柄,以它为参数,调用各种GDI函数实现各种文字或图形的输出。

设备描述表是GDI内部保存数据的一种数据结构,此结构中的属性内容与特定的输出设备(显示器,打印机等)相关,属性定义了GDI函数的工作细节,在稍后我们将看到如何使用TextOut函数输出文字,在这里属性确定了文字的颜色,x坐标和y坐标映射到窗口显示区域的方式等。

设备描述表句柄一旦获得,那么系统将使用默认的属性值填充设备描述表结构。如果有必要,我们可以使用一些GDI函数获取和改变设备描述表中的属性值。[2][3]

三、PNG按钮的实现—VC++6.0中用GDI+调用png图片实现半透明渐变的特效窗口

(一)、概述

VC++6.0中调用*.png图片实现半透明渐变窗口,该程序实现了指针式和数字式两种时钟显示方式。窗口实现了半透明渐变窗口、窗口拖动无移动矩形框、隐藏了任务栏窗体按钮等。效果图如图一:

()准备工作

1图片资源准备工作。首先在Photoshop中编辑好时钟的背景、时针、分针以及数字时钟显示方式的所有图片,如下图:将这些图片保存成为带透明通道的.png格式(GDI+调用显示时能够透明调背景)。              1-1 程序执行后与WindowXP桌面背景效果图

2下面开始做好在VC6.0下展开此项工作的基本准备工作。

     下载gdiplus forVC6.0SDK,(总共两兆多)。

、在C盘建立文件夹“GDI+”将开发包拷贝在里面,亦即建立如下路径,以便例子代码顺利编译(当然你可以放到任意你喜欢的地方,只要在你的Project中正确包含路径即可!)。 

C:GDI+Includes

C:GDI+Lib

C:GDI+gdiplus.dll

stdAfx.h中添加对GDI+环境的设置

#define UNICODE

#ifndef ULONG_PTR

#define ULONG_PTR unsigned long*

#endif

#include “C:/gdi+Includes+gdiplus.h”   //请修改为你的头文件路径

using namespace Gdiplus;

#pragma comment(lib, “C: gdi+//Lib//GdiPlus.lib”) //请修改为你的.lib文件路径

GDIPClock.cpp中编辑appInitInstance()中添加如下代码进行GDI+的初始化工作

GdiplusStartupInput ;

       ULONG_PTR gdiplusToken;

       GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

       ……

//在对话框程序结束后关闭gdiplus环境

GdiplusShutdown(gdiplusToken);

()程序的实现全过程

1、建立一个基于对话框的Project,这里的名称为GDIPClock

2、在GDIPClockDlg.h中定义所有类成员变量,包括所有图片的指针和图片的长宽尺寸信息。

Image *m_pImageClock;

Image *m_pImageClock1;

Image *m_pImageHHour;

Image *m_pImageHMinu;

Image *m_pImageHSec;

Image *m_pImageNum;

int m_BakWidth , m_BakHeight ;

int m_HourWidth, m_HourHeight;

int m_MinuWidth , m_MinuHeight;

int m_SecWidth , m_SecHeight ;

HINSTANCE hFuncInst ;

Typedef BOOL (WINAPI *MYFUNC)(HWND,HDC,POINT*,SIZE*,HDC,POINT*,COLORREF,BLENDFUNCTION*,DWORD);         

       MYFUNC UpdateLayeredWindow;

在这一步中需要特别说明的是,在创建透明窗口式需要调用一个Windows API函数
原创粉丝点击