我喜欢蓝天,也喜欢雨天。
分类: Windows平台
2013-08-16 15:11:51
1.GDI图元
直线和曲线
填充区域
位图
文本
2.获取设备描述表句柄的另一更通用方法:
hdc = CreateDC(pszDriver,pszDevice,pszOutput,pData);
DeleteDC(hdc);
hdc = CreateDC(TEXT("DISPLAY",NULL,NULL,NULL));
3.一个设备描述表通常指一个物理显示设备,如视频显示器和打印机.获取有关设备的信息,如显示器的显示尺寸和色彩范围,用下面的函数:
IValue = GetDeviceCaps(hdc,iIndex); HORZRES宽度(像素);VERTRES 高度;
4.分辨率:
一英寸的像素数。
5.小字体:要windows假定视频显示分辨率为每英寸96点;
大字体:要windows假定视频显示分辨率为每英寸120点;
6.写像素:SetPixel(hdc,x,y,crColor);
crColor = GetPixel(hdc,x,y);得到指定坐标的像素颜色。
7.还有一些画直线、椭圆的函数
8.获取画笔句柄:hPen = GetStockObject(WHITE_PEN);
将画笔选进设备描述表:SelectObject(hdc,hPen); 合为一句话:SelectObject(hdc,GetStockObject(WHITE_PEN)); 返回值是调用前设备描述表中的画笔句柄.
创建画笔:hPen = CreatePen(iPenStyle, iWidth,crColor);
CreatePenIndirect(&logpen);
9.创建画刷:hBrush = CreateSolidBrush(crColor);
创建影线画刷:hBrush = CreateHatchBrush(iHatchStyle,crColor);
另一个:hBrush = CreateBrushIndirect(&logbush);
SelectObject(hdc,hBrush);
DeleteObject(hBrush);
10.映射方式: 逻辑单位转换为设备单位,即像素的方式.
设置映射方式:SetMapMode(hdc,iMapMode);
获取:iMapMode = SetMapMode(hdc);
11.视口是基于设备坐标;
窗口是基于逻辑坐标。
6.设备描述表:
设备描述表句柄是GDI函数的窗口“密码”,有了这种设备描述表句柄,程序员就能自如的在客户区上绘图,使图形如自己所愿的变得好看或者难看。设备描述表实际是GDI内部保存的数据结构。
DC是个数据结构。而HWND是一个32BIT的值。就好比你进个房间。则这个房间的属性已经确定(包括门窗的大小等) 这个HWND就相当与房间号码。而DC相当与房间的属性。你要改门窗的颜色。一定要先得到房间号(HWND)。然后根据它得到房间属性(HDC)。得到后你想干啥就干啥啊。
窗口句柄:通过窗口句柄可以接收到对窗口的移动、最大化、最小化、关闭等消息;
设备描述表句柄:要对这个窗口进行绘制,就要得到设备描述表句柄,这样才能对它绘制。
7.设备坐标和逻辑坐标
GDI的文本和图形输出函数使用逻辑坐标,而在客户区移动或按下鼠标的鼠标位置是采用设备坐标。
<1>逻辑坐标系是面向DC的坐标系,这种坐标不考虑具体的设备类型,在绘图时,Windows会根据当前设置的映射模式将逻辑坐标转换为设备坐标。
<2>设备坐标系是面向物理设备的坐标系,这种坐标以像素或设备所能表示的最小长度单位为单位,X轴方向向右,Y轴方向向下。设备坐标系的原点位置(0, 0)不限定在设备显示区域的左上角。
设备坐标系分为屏幕坐标系、窗口坐标系和客户区坐标系三种相互独立的坐标。
当Windows应用程序在其客户区绘制图形时,必须给出在客户区的位置,其位置用x和y 两个坐标表示,x表示横坐标,y表示纵坐标。在所有的GDI绘制函数中,这些坐标使用的是一种"逻辑单位"。当GDI函数将输出送到某个物理设备上时,Windows将逻辑坐标转换成设备坐标(如屏幕或打印机的像素点)。
逻辑坐标和设备坐标的转换是由映射模式决定的。
映射模式被储存在设备环境中。
8.GetMapMode函数用于从设备环境得到当前的映射模式,
SetMapMode函数用于设置设备环境的映射模式。
9.为什么会分设备坐标和逻辑坐标???逻辑坐标都一样,方便管理。如从设备1上得到一个设备坐标,转化为逻辑坐标,然后把这个逻辑坐标按另一种转化关系,转化为设备2的设备坐标。