win程序设计笔记3
TextOut (hdc, x, y, psText, iLength) ;TextOut中的x和y定义显示区域内字串的开始位置,x是水平位置,y是垂直位置。字串中第一个字元的左上角位於座标点(x,y)。在内定的装置内容中,原点(x和y均为0的点)是显示区域的左上角。如果在TextOut中将x和y设为0,则将从显示区域左上角开始输出字串。
psText参数是指向字串的指标,iLength是字串中字元的个数。如果psText指向Unicode字串,则字串中的位元组数就是iLength值的两倍。字串中不能包含任何ASCII控制字元(如回车、换行、制表或退格),Windows会将这些控制字元显示为实心块。Text0ut不识别作为字串结束标志的内容为零的位元组(对於Unicode,是一个短整数型态的0),而需要由nLength参数指明长度。
一般地,处理WM_PAINT讯息的形式如下:case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
***
EndPaint (hwnd, &ps) ;
return 0 ;如果不呼叫BeginPaint和EndPaint(或者ValidateRect),则Windows不会使该区域变为有效。相反,Windows将发送另一个WM_PAINT讯息,且一直发送下去。
PAINTSTRUCT结构:
typedef struct tagPAINTSTRUCT
{
HDC hdc ;
BOOL fErase ;
RECT rcPaint ;
BOOL fRestore ;
BOOL fIncUpdate ;
BYTE rgbReserved ;
} PAINTSTRUCT ;
WNDCLASS结构的hbrBackground栏位指定的画刷来擦除背景,这个WNDCLASS结构是程式在WinMain初始化期间登录视窗类别时使用的。
许多Windows程式使用白色画刷。以下叙述设定视窗类别结构栏位值:
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
在处理WM_PAINT讯息时,为了在更新的矩形外绘图,可以使用如下呼叫:
InvalidateRect (hwnd, NULL, TRUE) ;
取得装置内容代号:方法二
要得到视窗显示区域的装置内容代号,可以呼叫GetDC来取得代号,在使用完後呼叫ReleaseDC:
hdc = GetDC (hwnd) ;
***
ReleaseDC (hwnd, hdc) ;
TEXTMETRIC结构有20个栏位,我们只使用前七个:
typedef struct tagTEXTMETRIC
{
LONG tmHeight ;
LONG tmAscent ;
LONG tmDescent ;
LONG tmInternalLeading ;
LONG tmExternalLeading ;
LONG tmAveCharWidth ;
LONG tmMaxCharWidth ;
其他结构栏位
}TEXTMETRIC, * PTEXTMETRIC ;
要使用GetTextMetrics函式,需要先定义一个结构变数(通常称为tm):
TEXTMETRIC tm ;
在需要确定文字大小时,先取得装置内容代号,再呼叫GetTextMetrics:
hdc = GetDC (hwnd) ;
GetTextMetrics (hdc, &tm) ;
ReleaseDC (hwnd, hdc) ;
假设要编写一个Windows程序,在显示区域显示几行文字,这需要先取得字元宽度和高度。您可以在视窗讯息处理程式内定义两个变量来保存平均字元宽度(cxChar)和总的字元高度(cyChar):
static int cxChar, cyChar ;
如果变量在函数外面定义,则不需要定义为static
取得系统字体的字元宽度和高度的WM_CREATE程式码:case WM_CREATE:
hdc = GetDC (hwnd) ;
GetTextMetrics (hdc, &tm) ;
cxChar = tm.tmAveCharWidth ;
cyChar = tm.tmHeight + tm.tmExternalLeading ;
ReleaseDC (hwnd, hdc) ;
return 0 ;wsprintf与TextOut的组合:
TextOut (hdc, x, y, szBuffer,wsprintf (szBuffer, TEXT ("The sum of %i and %i is %i"), iA, iB, iA + iB)) ; 书中本节例子
SYSMETS1.C
第84行错误
GetSystemMetrics (sysmetrics.iIndex))) ;
应为
GetSystemMetrics (sysmetrics.index))) ;
页:
[1]