WIN编程入门GDI.ppt
,第二部分 Win32 SDK编程,在Windows应用程序中,图形与文本都是通过图形设备接口,简称GDI(Graphics Device Interface),以图形形式来处理的。GDI是Windows的子系统,它负责在视讯显示器和打印机上显示图形。GDI是Windows非常重要的部分。要在窗口的显示区域绘图,可以使用Windows的图形设备接口(GDI)函数。从程序写作者的观点来看,GDI由几百个函数调用和一些相关的数据类型、宏和结构组成。Windows提供了用于将字符串输出到窗口的显示区域内TextOut等。该函数的格式如下:BOOL TextOut(HDC hdc,/handle to device context int nXStart,/x-coordinate of starting position int nYStart,/y-coordinate of starting position LPCTSTR lpString,/pointer to string int cbString/number of characters in string);,GDI简介,设备内容(简称为DC):句柄只不过是一个数值,Windows以它在内部使用对象。程序写作者从Windows取得句柄,然后在其它函数中使用该句柄。设备内容句柄是GDI函数的窗口通行证,有了这种设备内容句柄,程序写作者就能自如地在显示区域上绘图。实际上DC是GDI内部保存的数据结构。设备内容与特定的显示设备(如视讯显示器或打印机)相关。对于显示器,设备内容总是与显示器上的特定窗口相关。设备内容中的有些值是图形属性,这些属性定义了GDI绘图函数工作的细节。例如,对于TextOut,设备内容的属性确定了文字的颜色、文字的背景色、x坐标和y坐标映像到窗口的显示区域的方式,以及显示文字时Windows使用的字体。当程序需要绘图时,它必须先取得设备内容句柄。在取得了该句柄后,Windows用内定的属性值填入内部设备内容结构。在后面的章节中您会看到,可以通过呼叫不同的GDI函数改变这些默认值。利用其它的GDI函数可以取得这些属性的目前值。当然,还有其它的GDI函数能够在窗口的显示区域真正地绘图。当程序在显示区域绘图完毕后,它必须释放设备内容句柄。句柄被程序释放后就不再有效,且不能再被使用。程序必须在处理单个消息处理期间取得和释放句柄。除了呼叫CreateDC(函数,在本章暂不讲述)建立的设备内容之外,程序不能在两个消息之间保存其它设备内容句柄。,GDI简介-HDC,取得设备内容句柄的方法:HDC hdc;hdc=BeginPaint(HWND hwnd,LPPAINTSTRUCT lpPaint);Do some drawing with hdc;EndPaint(HWND hwnd,CONST PAINTSTRUCT lpPaint);以上只能用于WM_PAINT消息响应中;hdc=GetDC(HWND hwnd);Do some drawing with hdc;ReleaseDC(HWND hwnd,HDChdc);以上用于非WM_PAINT消息响应中,GDI简介-HDC,设置字体颜色:COLORREF SetTextColor(HDC hdc,/handle to device context COLORREF crColor/text color);设置背景色:COLORREF SetBkColor(HDC hdc,/handle of device context COLORREF crColor/background color value);设置对其方式:UINT SetTextAlign(HDC hdc,/handle to device context UINT fMode/text-alignment flag);,GDI简介-字体,字体参数:BOOL GetTextMetrics(HDC hdc,/handle to device context LPTEXTMETRIC lptm/pointer to text metrics structure);typedef struct tagTEXTMETRIC LONG tmHeight;LONG tmAscent;LONG tmDescent;LONG tmInternalLeading;LONG tmExternalLeading;LONG tmAveCharWidth;LONG tmMaxCharWidth;其它结构字段 TEXTMETRIC,*PTEXTMETRIC;,GDI简介-字体,GDI简介-字体,字体参数:,GDI简介-字体,字体参数:TEXTMETRIC tm;case WM_CREATE:hdc=GetDC(hwnd);/获得字体参数GetTextMetrics(hdc,GDI简介-字体,字体参数:For(i=0;i 10;i+)TextOut(hdc,0,i*cyChar,studentsi.stuOrder,strlen(studentsi.stuOrder);TextOut(hdc,cxChar*10,i*cyChar,studentsi.stuNo,strlen(studentsi.stuNo);SetTextAlign(hdc,TA_RIGHT);/设置对其方式TextOut(hdc,cxChar*30,i*cyChar,studentsi.stuName,strlen(studentsi.stuName);SetTextAlign(hdc,TA_LEFT);/设置对其方式TextOut(hdc,cxChar*50,i*cyChar,studentsi.stuSchool,strlen(studentsi.stuSchool);,GDI简介练习,选择几个类似学号、姓名等信息的结构数据,然后格式化输出这些信息。,