13字体
字体
在WIN32运用中会用到各种字体,那么如何设置字体的样式、大小、颜色呢?
设置颜色,字体属于文本,可以使用SetTextColor(hdc,RGB(255,0,0));进行字体颜色的改变。
下面介绍字体样式、大小。
函数原型:
WINGDIAPI HFONT WINAPI CreateFontA( __in int cHeight, __in int cWidth, __in int cEscapement, __in int cOrientation, __in int cWeight, __in DWORD bItalic,__in DWORD bUnderline, __in DWORD bStrikeOut, __in DWORD iCharSet, __in DWORD iOutPrecision, __in DWORD iClipPrecision,__in DWORD iQuality, __in DWORD iPitchAndFamily, __in_opt LPCSTR pszFaceName);
参数介绍:
cHeight:字体的高度
cWidth:字体的宽度
cEscapement:使全部字体逆时针旋转,值将为原值的1/10,如150度,实际为15度
cOrientation:使单个字体逆时针旋转,值将为原值的1/10,如150度,实际为15度
cWeight:字体的权值,简体、加粗等
bItalic:设置字体是否倾斜
bUnderline:设置下划线
bStrikeOut:设置字体删除线(中间画一横)
iCharSet:指定字符集
iOutPrecision:指定输出精度,与输出字体的高度、宽度、移位匹配。可为0
iClipPrecision:裁剪精度。定义如何裁剪部分超出裁剪区的字符
iQuality:输出质量。
iPitchAndFamily:指定字体间距和字体族的间距
pszFaceName:字体的字样名。如:宋体、黑体、微软雅黑等
步骤:
1.创建字体
CreateFont(size.cx/10,size.cy/10,150,300,FW_NORMAL,TRUE,FALSE,FALSE,GB2312_CHARSET,0,0,0,0,"黑体")
2.将字体放入窗口DC中
hOldFont=SelectObject(hdc,CreateFont(size.cx/10,size.cy/10,150,300,FW_NORMAL,TRUE,FALSE,FALSE,GB2312_CHARSET,0,0,0,0,"黑体"));
3.写出字体
DrawText(hdc,str,strlen(str),&rect,DT_CENTER|DT_SINGLELINE|DT_VCENTER);
4.释放DC
注意点:
1.参数cEscapement、cOrientation,值将为原值的1/10,如150度,实际为15度
2.参数cHeight、Width,最后选取窗口几分之几,当窗口变换时,可以随之变换。
3. SetGraphicsMode(hdc,GM_ADVANCED);此函数使单个字体发生旋转,不影响整体旋转。
结果:
源代码: LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; HGDIOBJ hOldFont; static char str[128]="Windows程序设计!"; static RECT rect; static SIZE size; BOOL bFlat=GetClientRect(hWnd,&rect); switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // 分析菜单选择: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_SIZE: size.cx=LOWORD(lParam); size.cy=HIWORD(lParam); break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: 在此添加任意绘图代码... SetGraphicsMode(hdc,GM_ADVANCED); hOldFont=SelectObject(hdc,CreateFont(size.cx/10,size.cy/10,150,300,FW_NORMAL,TRUE,FALSE,FALSE,GB2312_CHARSET,0,0,0,0,"黑体")); if(bFlat) { //SetTextColor(hdc,RGB(255,0,0)); DrawText(hdc,str,strlen(str),&rect,DT_CENTER|DT_SINGLELINE|DT_VCENTER); } DeleteObject(SelectObject(hdc,hOldFont)); EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }