Win32 SDK 学习笔记5
2017-04-05 19:28
323 查看
要在指定位置显示文字,用的更多是TextOut()函数。它与DrawText()函数特点不同,作用也不同。
一、TextOut()函数的基本用法
TextOut()函数既不处理回车符、TAB键等,也不自动回行,以指定的位置作基准点,在其附近显示,默认时基准点是这一行字的左上角。要知道当前文字的对齐方式,可以用GetTextAlign()函数,本节先学习与之相对的SetTextAlign()函数。TextOut(hdc, 30, 20, str1, (int)strlen(str1) );
二、文字的对齐方式
SetTextAlign()函数用来设置文字的对齐方式。下面我们以窗口正中间作为基准点来了解这个函数基本内容。LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; TCHAR str1[] = "My first GDI is so easy and cool!"; RECT rc;// int x;// switch(message) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); GetClientRect(hWnd, &rc);// x = rc.right / 2;// SetTextAlign(hdc, TA_LEFT);//左对齐 TextOut(hdc, x, 20, str1, (int)strlen(str1) );// EndPaint(hWnd, &ps); break; //其中"//"表示左对齐新加的代码
三、设置文字的字体、大小、方向
#include <windows.h> TCHAR szWindowClass[] = "My first window's name"; TCHAR szTitle[] = "My first window"; ATOM MyRegisterClass(HINSTANCE); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HFONT SetMyFont(HDC, LPCTSTR, int, int, int); int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ) { MSG msg; MyRegisterClass(hInstance); if ( !InitInstance(hInstance, nShowCmd) ) { return FALSE; } while ( GetMessage(&msg, NULL, 0, 0) ) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; } ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_VREDRAW | CS_HREDRAW; wc.lpfnWndProc = (WNDPROC)WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(hInstance, IDI_APPLICATION); wc.hCursor = LoadCursor(hInstance, IDC_SIZEALL); wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = szWindowClass; wc.hIconSm = LoadIcon(wc.hInstance, IDI_APPLICATION); return RegisterClassEx(&wc); } BOOL InitInstance(HINSTANCE hInstance, int ncmdshow) { HWND hWnd; hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, ncmdshow); UpdateWindow(hWnd); return TRUE; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; HFONT hFont, hFontOld; TCHAR str1[] = "My first GDI"; TCHAR str2[] = "星期三"; TCHAR str3[] = "Configuration"; int width, height; switch(message) { case WM_PAINT: RECT rc; hdc = BeginPaint(hWnd, &ps); GetClientRect(hWnd, &rc); SetBkMode(hdc, TRANSPARENT); width = (rc.right - 20) / (int)strlen(str1); height = rc.bottom - 20; hFont = SetMyFont(hdc, (LPCTSTR)"黑体", width, height, 90); hFontOld = (HFONT)SelectObject(hdc, hFont); SetTextColor(hdc, 0xC0C0C0); TextOut(hdc, 10, 10, str1, (int)strlen(str1)); DeleteObject(hFont); hFont = SetMyFont(hdc, (LPCTSTR)"楷体", width, height, 450); hFontOld = (HFONT)SelectObject(hdc, hFont); SetTextColor(hdc, 0xF00000); TextOut(hdc, 16, 0, str2, (int)strlen(str2)); DeleteObject(hFont); hFont = SetMyFont(hdc, (LPCTSTR)"宋体", width, height, -90); hFontOld = (HFONT)SelectObject(hdc, hFont); SetTextColor(hdc, 0x0F0000); TextOut(hdc, 0, 10, str3, (int)strlen(str3)); DeleteObject(hFont); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } HFONT SetMyFont(HDC hdc, LPCTSTR face, int width, int height, int angle) { HFONT hFont; hFont = CreateFont( height, //字体的逻辑高度 width, //逻辑平均字符宽度 angle, //与水平线的角度 0, //基线方位角度 FW_REGULAR, //字形:常规 FALSE, //字形:斜体 FALSE, //字形:下划线 FALSE, //字形:粗体 GB2312_CHARSET, //字符集 OUT_DEFAULT_PRECIS, //输出精度 CLIP_DEFAULT_PRECIS, //剪截精度 PROOF_QUALITY, //输出品质 FIXED_PITCH | FF_MODERN, //倾斜度 face //字体 ); return hFont; }
相关文章推荐
- Win32 SDK学习笔记1
- Win32 SDK学习笔记3
- Win32 SDK 学习笔记4
- Win32 SDK 学习笔记2
- Win32 SDK 学习笔记6
- Win32 SDK学习笔记0
- Win32学习笔记——图标资源
- Win32学习笔记——菜单和加速键资源的使用
- 用S60操作系统SDK开发NOKIA手机应用程序-学习笔记(3)
- Delphi2005学习笔记5 NET Interoperability: .NET ↔ Win32
- Win32学习笔记 第一章
- Win32学习笔记——鼠标操作
- 用S60操作系统SDK开发NOKIA手机应用程序-学习笔记(1)
- Win32学习笔记 第一章 开始
- Win32学习笔记——win32主框架
- Win32学习笔记 第三章 HelloWin
- Win32学习笔记——键盘操作
- 用S60操作系统SDK开发NOKIA手机应用程序-学习笔记(3)
- 学习笔记(3)--Using RAS SDK
- WIN32 API/WTL 学习笔记(消息传递过程)