GDI+ 还将支持其它技术,譬如重新着色、颜色校正、元数据、图形容器 .[2][3]
( 三) 编程模式的改变 Device Contexts (设备描述表), Handles (句柄), 和 Graphics Objects (图形对象)
设备描述表是 Windows 使用的一个数据结构,用于存储具体设备能力和与如何在设备上重绘一些项目的有关属性信息。而且视频设备的设备描述表还与特定的窗口有关。利用 GDI+ 函数,你可以简单地创建一个图形对象( Graphics ),然后以你熟悉的面向对象的编程方式调用它的方法即可。 Graphics 对象是 GDI+ 的核心,设备描述表( DC )和图形对象( Graphics )在不同的环境下扮演着同样的角色,发挥着类似的作用,但是两者也存在着本质的不同。前者使用基于句柄的编程方法而后者使用面向对象的编程方法。
图形对象和设备对象一样,在 GDI+ 中,你只需把这些绘图对象作为一个参数传递给图形对象 Graphics 方法调用即可,每一个图形对象所使用的绘图工具至于它调用方法使用的参数有关,它可以通过参数使用多种 Pen 和 Brush 绘图,而不是与特定的笔和画刷联系在一起。
GDI 是 Graphics 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.0 的 SDK ,(总共两兆多)。
② 、在 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 中编辑 app 的 InitInstance() 中添加如下代码进行 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 函数

1103

被折叠的 条评论
为什么被折叠?



