M8 是基于WinCE的开发平台,但是是那种减肥版的,很多功能都不能用,比如CString这个类,只要包含#include <afx.h> 则模拟器就会死在进程创建的地方,这个应该是winCE不支持。今天试验了两种设置字体并显示的方法,下面一一列举:
1.GetFont()的方法,具体使用如下:
HFONT hfont = FontHelper::GetFont(80);//80大小的字体
HFONT hOldFont = (HFONT)SelectObject(hdcMem, hfont);//设置到DC
int bkMode = SetBkMode(hdcMem, TRANSPARENT);//设置模式
COLORREF color = SetTextColor(hdcMem, RGB(255, 255, 255));//设置颜色
TCHAR szTitle[250]; // The title bar text
CMzRect rcText(0, 0, 444, 444);//注意MZ的Rect是左上角坐标和右下角坐标,没有宽和高
HINSTANCE hInstance = GetModuleHandle(0);//获取hInstance,这个和windows编程一样
LoadString(hInstance,IDS_STRING130,szTitle,250);//从资源string table里面获得文字
DrawText(hdcMem, szTitle, _tcslen(szTitle), rcText, DT_CENTER);画到屏幕上
2.使用LOGFONT设置字体
CMzFont hFont;
LOGFONT logFont; //创建LOGFONT的数据
memset(&logFont,0,sizeof(LOGFONT)); // 清零
logFont.lfHeight=30; //设置高度这个等效于GetFont
logFont.lfWeight = 15;设置字体的重量,也就是粗细
wcscpy(logFont.lfFaceName,L"Arial"); //给他设置字体名称
hFont.CreateFontIndirect(&logFont); ////创建字体
//下面基本一样
SelectObject(hdcMem,hFont); //
int bkMode = SetBkMode(hdcMem, TRANSPARENT);
COLORREF color = SetTextColor(hdcMem, RGB(255, 0, 0));
TCHAR szTitle[250]; // The title bar text
CMzRect rcText(0, 0, 720, 480);
HINSTANCE hInstance = GetModuleHandle(0);
LoadString(hInstance,IDS_STRING_GAMERULE,szTitle,250);
DrawText(hdcMem, szTitle, _tcslen(szTitle), rcText, DT_LEFT);
可以看到两种方法都是可以实现DrawText,第一种可以用于简单的设置,只要一个函数就搞定,第二种呢可以设置一些详细LOGFONT 里面的属性,还有宽度啊什么的,具体还没试验。。
以上就是设置字体的两种方法,同时提供了如何从string table中获得字符串的方法
HINSTANCE hInstance = GetModuleHandle(0);
LoadString(hInstance,IDS_STRING_GAMERULE,szTitle,250);