您的位置:首页 > 其它

第25周-window程序设计(基础篇)-第4章-GDI图形设备接口

2016-09-21 11:05 190 查看
1、GDI图形设备接口:

/*文字输出函数*/
TextOut(hdc,x,y,psText,iLength);
a、hdc-[内容设备句柄],psText-指向字符串指针,iLength-字符串长度
b、设备内容(简称为「DC」)实际上是GDI内部保存的数据结构。

/*Windows应用程序一般使用两种方法来取得设备内容句柄*/
PAINTSTRUCT ps;

/*BeginPaint传回的值是设备内容句柄,这一传回值通常被保存在叫做hdc的变量*/
HDC hdc;
//HDC数据型态定义为32位的无正负号整数

/*处理WM_PAINT消息形式如下*/
caseWM_PAINT:
hdc = BeginPaint(hwnd,&ps);
使用GDI函数
EndPint(hwnd,&ps);
return 0;

/*若窗口消息处理程序不处理WM_PAINT消息,则DefWindowProc以下列代码处理WM_PAINT消息*/
caseWM_PAINT:
BeginPaint(hwnd,&ps); //不能省略
EndPaint(hwnd,&ps); //不能省略
return 0;

/*绘图信息结构PAINTSTRUCT*/
typedef struct tagPAINTSTRUCT
{
HDC hdc; //设备内容句柄
BOOL fErase; //fErase被标志为FALSE(0),这意味着Windows已经擦除了无效矩形的背景。
RECT rcPaint; //rcPaint字段定义了无效矩形的边界
BOOL fRestore; //恢复
BOOL flncUpdate; //更新
BYTE rgbReserved[32]; //保留
}PAINTSTRUCT;

/*白色画刷*/
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);

/*更新的矩形外绘图可呼叫下面函数*/
InvalidateRect(hwnd,NULL,TRUE); //若第三个参数改为FALSE则不擦除背景

注意:关心程序性能和速度的程序写作者希望在处理WM_PAINT期间使用无效矩形范围,以避免不必要的GDI呼叫。

/*要得到窗口显示区域的设备内容句柄,可以呼叫GetDC来取得句柄,在使用完后呼叫ReleaseDC:*/
hdc = GetDC(hwnd);
使用GDI函数
ReleaseDC(hwnd,hdc);
注意:需要成对出现,与BeginPaint和EndPaint类似。GetDC传回的设备内容句柄具有一个剪取矩形,它等于整个显示区域

/*与BeginPaint不同,GetDC不会使任何无效区域变为有效。需用下面的函数*/
ValidateRect(hwnd,NULL);
GetDC传回用于写入窗口显示区域的设备内容句柄,而GetWindowDC传回写入整个窗口的设备内容句柄。

/*[逻辑坐标]:传递给函数的坐标*/
Windows有许多「坐标映像方式」,它们用来控制GDI函数指定的逻辑坐标转换为显示器的实际图素坐标的方式。映像方式在设备内容中定义,内定映像方式是MM_TEXT(使用WINGDI.H中定义的标识符)。
单词:device content 设备内容、
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: