字体
前面无论是使用文本输出函数还是 static 控件,字体都是默认的,比较丑陋,我们完全可以自己创建更加炫酷的字体。
创建字体使用 CreateFont 函数,它的原型是:
HFONT CreateFont(
int cHeight, //字体的逻辑高度
int cWidth, //字体的逻辑宽度
int cEscapement, //指定移位向量相对X轴的偏转角度
int cOrientation, //指定字符基线相对X轴的偏转角度
int cWeight, //设置字体粗细程度
DWORD bItalic, //是否启用斜体
DWORD bUnderline, //是否启用下划线
DWORD bStrikeOut, //是否启用删除线
DWORD iCharSet, //指定字符集
DWORD iOutPrecision, //输出精度
DWORD iClipPrecision, //剪裁精度
DWORD iQuality, //输出质量
DWORD iPitchAndFamily, //字体族
LPCSTR pszFaceName //字体名
);
这参数有些多,反正Ty记不住,一般都是复制的,然后就修改一下,接下来就用例子来说明吧。
字体也是一种 GDI 对象,使用完后也要在 WM_DESTROY 消息中删除。
创建完字体后并不能立即使用,还需要手动触发 WM_SETFONT 消息,让Windows 将当前字体设置为我们创建的字体。
看示例
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
HDC hdc; //设备环境句柄
PAINTSTRUCT ps;
RECT rect;
//定义两个画刷,请定义为静态变量
static HWND m_static1;
static HFONT m_font;
static HBRUSH hSolidBrush;
static HBRUSH hHatchBrush;
switch (message){
case WM_CREATE:
m_font = CreateFont(
-18/*高度*/, -9/*宽度*/, 0/*不用管*/, 0/*不用管*/, 400 /*一般这个值设为400*/,
FALSE/*不带斜体*/, FALSE/*不带下划线*/, FALSE/*不带删除线*/,
DEFAULT_CHARSET, //这里我们使用默认字符集,还有其他以 _CHARSET 结尾的常量可用
OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, //这行参数不用管
DEFAULT_QUALITY, //默认输出质量
FF_DONTCARE, //不指定字体族*/
L"华文行楷" //字体名
);
m_static1 =CreateWindow(L"static", L"大家好,我是Ty\n 中国加油",
WS_CHILD /*子窗口*/ | WS_VISIBLE /*创建时显示*/ | WS_BORDER /*带边框*/ | SS_LEFTNOWORDWRAP,
20, 30, 220, 60, hwnd, (HMENU)1, m_hinst,0);
//设置控件字体
SendMessage(
m_static1, //欲设置字体的控件句柄
WM_SETFONT, //消息名(消息类型)
(WPARAM)m_font, //字体句柄
NULL //传空值即可
);
break;
//窗口绘制消息
case WM_PAINT:
return 0;
//窗口销毁消息
case WM_DESTROY:
//释放资源
DeleteObject(m_font);//删除创建的字体
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
结果: