好像又进入了一个疲惫期了,晚上状态不好,但是还是想继续更新下博客,继上次分析了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);
创建字体
选入设备环境
使用字体
删除字体
下面也有一个实例来实线刚才讲到的文本函数和字体应用的问题。
#include <windows.h>
#include "UseFont.h" struct DecodeUnit MainMessage[]={
WM_DESTROY,DoDestroy,
WM_PAINT,DoPaint
}; int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow) {
//第一步:创建一个窗体类
WNDCLASS ws; TCHAR szAppName[]= TEXT("UseFont"); ws.style = CS_HREDRAW | CS_VREDRAW;
ws.cbClsExtra = ;
ws.cbWndExtra = ;
ws.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
ws.hCursor = ;
ws.hIcon = ;
ws.hInstance = hInstance;
ws.lpfnWndProc = WndProc;
ws.lpszClassName = szAppName;
ws.lpszMenuName = ; //第二步:注册窗体类 if (!RegisterClass(&ws))
return -; //第三步:根据窗体类创建一个窗体 HWND hWnd = CreateWindow(szAppName,TEXT("Use Font"),WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_VISIBLE,
,,,,
NULL,NULL,hInstance,NULL); //第四步:显示窗体 ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd); //第五步:让窗体获得系统消息 MSG msg;
while(GetMessage(&msg,NULL,,))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
} return ();
} LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
int i;
for (i = ;i< dim(MainMessage);i++)
{
if (message == MainMessage[i].message )
MainMessage[i].fun(hwnd,message,wParam,lParam);
}
return DefWindowProc(hwnd,message,wParam,lParam);
} LRESULT DoPaint(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{ PAINTSTRUCT ps;
HDC hdc;
RECT rect ;
int nSmooth; LOGFONT lf;
HFONT hFontNew, hFontOld; //定义要显示的内容
TCHAR str[] = TEXT("show a Shadow Text"); //获得系统设备环境
hdc = BeginPaint(hwnd, &ps);
//获得窗体区域
GetClientRect(hwnd,&rect); //初始化自定义字体结构
memset(&lf, , sizeof(LOGFONT)); //设置字体圆滑显示
nSmooth = ;
SystemParametersInfo(SPI_SETFONTSMOOTHINGCONTRAST, , &nSmooth, FALSE); //设置自定义字体的显示质量
lf.lfQuality = CLEARTYPE_QUALITY;
//设置字体的倾斜度
lf.lfEscapement = ;
//创建自定义字体
hFontNew = CreateFontIndirect(&lf);
//选入到设备环境
hFontOld = (HFONT) SelectObject(hdc, hFontNew);
//设置背景模式
SetBkMode(hdc,TRANSPARENT);
//设置字体颜色为红色
SetTextColor(hdc,RGB(0xFF,,));
//绘制文字
DrawText(hdc,str,-,&rect,DT_SINGLELINE| DT_CENTER | DT_VCENTER); //移动矩形区域
OffsetRect(&rect,-,-);
//重新设置字体颜色为黑色
SetTextColor(hdc,RGB(,,));
DrawText(hdc,str,-,&rect,DT_SINGLELINE| DT_CENTER | DT_VCENTER); //清除使用过的资源
SelectObject(hdc, hFontOld);
DeleteObject(hFontNew);
//释放设备环境
EndPaint(hwnd,&ps); return ; } LRESULT DoDestroy(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
PostQuitMessage();
return ();
}
UseFont
这里的代码还有待继续探索其中的深奥之处,以及对其中一些函数的使用,任重道远~