1.输出文字
1-1.设备内容(上下文)
1-1-1.取得设备内容句柄(方法一)
PAINTSTRUCT ps ;
HDC hdc ;
caseWM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
使用GDI函数
EndPaint (hwnd, &ps) ;
return 0 ;
1-1-2.绘图信息结构
typedef struct tagPAINTSTRUCT
{
HDC hdc ; //设备内容句柄
BOOL fErase ; //表示是否擦除背景
RECT rcPaint ; //表示无效区域的范围
BOOL fRestore ;
BOOL fIncUpdate ;
BYTE rgbReserved[32] ;
} PAINTSTRUCT ;
1-1-3.取得设备内容句柄(方法二)
<span style="font-weight: normal;">PAINTSTRUCT ps ;
HDC hdc ;
caseWM_PAINT:
hdc = GetDC (hwnd) ;
使用GDI函数
ReleaseDC (hwnd, hdc) ;
return 0 ;</span>
<span style="font-weight: normal;">PAINTSTRUCT ps ;
HDC hdc ;
caseWM_PAINT:
hdc = GetDC (hwnd) ;
使用GDI函数
ReleaseDC (hwnd, hdc) ;
return 0 ;</span>
1-1-4.区别
BeginPaint()会使无效区域变为有效,而GetDC不会,所以使用GetDC后若不使用ValidateRect()使其有效,windows会不停的发送WM_Paint消息,使窗口闪烁或卡死
BOOL ValidateRect(
HWND hWnd, // 窗口的句柄
CONST RECT *lpRect // 指向RECT结构的指针
);
1-2.系统字体
1-2-1.字符结构
typedef struct tagTEXTMETRIC {
<span style="color:#ff0000;"> LONG tmHeight; //字符高度</span>
<span style="color:#ff0000;"> LONG tmAscent; //字符上部高度(基线以上)</span>
<span style="color:#ff0000;"> LONG tmDescent; //字符下部高度(基线以下)</span>
LONG tmInternalLeading; //由tmHeight定义的字符高度的顶部空间数目
LONG tmExternalLeading; //夹在两行之间的空间数目
<span style="color:#ff0000;"> LONG tmAveCharWidth; //平均字符宽度</span>
<span style="color:#ff0000;"> LONG tmMaxCharWidth; //最宽字符的宽度</span>
LONG tmWeight; //字体的粗细轻重程度
LONG tmOverhang; //加入某些拼接字体上的附加高度
LONG tmDigitizedAspectX; //字体设计所针对的设备水平方向
LONG tmDigitizedAspectY; //字体设计所针对的设备垂直方向
BCHAR tmFirstChar; //为字体定义的第一个字符
BCHAR tmLastChar; //为字体定义的最后一个字符
BCHAR tmDefaultChar; //字体中所没有字符的替代字符
BCHAR tmBreakChar; //用于拆字的字符
BYTE tmItalic; //字体为斜体时非零
BYTE tmUnderlined; //字体为下划线时非零
BYTE tmStruckOut; //字体被删去时非零
BYTE tmPitchAndFamily; //字体间距(低4位)和族(高4位)
BYTE tmCharSet; //字体的字符集
} TEXTMETRIC;
1-2-2.获取字符结构
TEXTMETRIC tm ;
hdc = GetDC (hwnd) ;
GetTextMetrics (hdc, &tm) ;
ReleaseDC (hwnd, hdc) ;
1-2-3.输出字体
BOOL TextOut(
HDC hdc, // 设备描述表句柄
int nXStart, // 字符串的开始位置 x坐标
int nYStart, // 字符串的开始位置 y坐标
LPCTSTR lpString, // 字符串
int cbString // 字符串中字符的个数
)
int DrawText(
HDC hDC, // 设备描述表句柄
LPCTSTR lpString, // 将要绘制的字符串
int nCount, // 字符串的长度
LPRECT lpRect, // 指向矩形结构RECT的指针
UINT uFormat // 正文的绘制选项
);