Wince 文本函数和字体应用

  好像又进入了一个疲惫期了,晚上状态不好,但是还是想继续更新下博客,继上次分析了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 }
UseFont

 这里的代码还有待继续探索其中的深奥之处,以及对其中一些函数的使用,任重道远~

你可能感兴趣的:(WinCE)