好像又进入了一个疲惫期了,晚上状态不好,但是还是想继续更新下博客,继上次分析了wince下设备环境以及怎么绘制相关图像后,,笔者在这片文章中讲到文本函数以及其相关应用。文本输出函数是输出文本的内容,也就是在一个窗体之上将文字输出的一个函数,当然输出文字有些居左居右居中的限制,例如显示背景颜色,前进颜色的一些输出设置,在wince中,字体是一个比较大的资源,它占据了很大的空间。所以wince当中所有的字体很少,但是它提供了一种方法,让我们可以自定义字体,这个简直nice呀,下面我来具体介绍一下上面提到的内容。
*文本输出函数
int DrawText( //通过DrawText可以将一段文字输出到指定的区域去
HDC hDC, //表示设备环境
LPCTSTR lpString, //被输出的字符串的指针
int nCount, //字符串中的字符数
LPRECT lpRect, //文本的显示矩形区域
UINT uFormat //文本的显示方法
);
*文本输出设置
1.设置文本的背景颜色
COLORREF SeTBkColor( HDC hdc,COLORREF crColor);
2.设置文本颜色
COLORREF SetTextColor(HDC hdc,COLORREF crColor);
3.文本的对齐方式
UINT SetTextAlign(HDC hdc,UINT fmode);
*wince 中的字体
*系统默认有两种字体:光栅型(raster)和TrueType型
*自定义字体类型: HFONT CreateFontlndirect(const LOGFONT *lplf);
创建字体
选入设备环境
使用字体
删除字体
下面也有一个实例来实线刚才讲到的文本函数和字体应用的问题。
1 #include <windows.h> 2 #include "UseFont.h" 3 4 5 struct DecodeUnit MainMessage[]={ 6 WM_DESTROY,DoDestroy, 7 WM_PAINT,DoPaint 8 }; 9 10 11 int WINAPI WinMain(HINSTANCE hInstance, 12 HINSTANCE hPrevInstance, 13 LPTSTR lpCmdLine, 14 int nCmdShow) 15 16 { 17 //第一步:创建一个窗体类 18 WNDCLASS ws; 19 20 TCHAR szAppName[]= TEXT("UseFont"); 21 22 ws.style = CS_HREDRAW | CS_VREDRAW; 23 ws.cbClsExtra = 0; 24 ws.cbWndExtra = 0; 25 ws.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 26 ws.hCursor = 0; 27 ws.hIcon = 0; 28 ws.hInstance = hInstance; 29 ws.lpfnWndProc = WndProc; 30 ws.lpszClassName = szAppName; 31 ws.lpszMenuName = 0; 32 33 //第二步:注册窗体类 34 35 if (!RegisterClass(&ws)) 36 return -1; 37 38 //第三步:根据窗体类创建一个窗体 39 40 HWND hWnd = CreateWindow(szAppName,TEXT("Use Font"),WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_VISIBLE, 41 10,10,400,300, 42 NULL,NULL,hInstance,NULL); 43 44 45 //第四步:显示窗体 46 47 ShowWindow(hWnd,nCmdShow); 48 UpdateWindow(hWnd); 49 50 51 //第五步:让窗体获得系统消息 52 53 MSG msg; 54 while(GetMessage(&msg,NULL,0,0)) 55 { 56 TranslateMessage(&msg); 57 DispatchMessage(&msg); 58 } 59 60 return (0); 61 } 62 63 64 65 LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) 66 { 67 int i; 68 for (i =0 ;i< dim(MainMessage);i++) 69 { 70 if (message == MainMessage[i].message ) 71 MainMessage[i].fun(hwnd,message,wParam,lParam); 72 } 73 return DefWindowProc(hwnd,message,wParam,lParam); 74 } 75 76 77 LRESULT DoPaint(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) 78 { 79 80 PAINTSTRUCT ps; 81 HDC hdc; 82 RECT rect ; 83 int nSmooth; 84 85 LOGFONT lf; 86 HFONT hFontNew, hFontOld; 87 88 //定义要显示的内容 89 TCHAR str[] = TEXT("show a Shadow Text"); 90 91 //获得系统设备环境 92 hdc = BeginPaint(hwnd, &ps); 93 //获得窗体区域 94 GetClientRect(hwnd,&rect); 95 96 //初始化自定义字体结构 97 memset(&lf, 0, sizeof(LOGFONT)); 98 99 //设置字体圆滑显示 100 nSmooth = 1000; 101 SystemParametersInfo(SPI_SETFONTSMOOTHINGCONTRAST, 0, &nSmooth, FALSE); 102 103 //设置自定义字体的显示质量 104 lf.lfQuality = CLEARTYPE_QUALITY; 105 //设置字体的倾斜度 106 lf.lfEscapement = 450; 107 //创建自定义字体 108 hFontNew = CreateFontIndirect(&lf); 109 //选入到设备环境 110 hFontOld = (HFONT) SelectObject(hdc, hFontNew); 111 //设置背景模式 112 SetBkMode(hdc,TRANSPARENT); 113 //设置字体颜色为红色 114 SetTextColor(hdc,RGB(0xFF,0,0)); 115 //绘制文字 116 DrawText(hdc,str,-1,&rect,DT_SINGLELINE| DT_CENTER | DT_VCENTER); 117 118 //移动矩形区域 119 OffsetRect(&rect,-2,-2); 120 //重新设置字体颜色为黑色 121 SetTextColor(hdc,RGB(0,0,0)); 122 DrawText(hdc,str,-1,&rect,DT_SINGLELINE| DT_CENTER | DT_VCENTER); 123 124 //清除使用过的资源 125 SelectObject(hdc, hFontOld); 126 DeleteObject(hFontNew); 127 //释放设备环境 128 EndPaint(hwnd,&ps); 129 130 return 0; 131 132 133 } 134 135 LRESULT DoDestroy(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) 136 { 137 PostQuitMessage(0); 138 return (0); 139 }
这里的代码还有待继续探索其中的深奥之处,以及对其中一些函数的使用,任重道远~