win32 api CreateFont不起作用

C语言 码拜 4年前 (2016-09-17) 638次浏览
case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		hFont = CreateFontW(
			48,
			0,
			0,
			0, 
			FW_REGULAR, 
			FALSE, 
			FALSE,  
			FALSE, 
			GB2312_CHARSET,
			OUT_DEFAULT_PRECIS,
			CLIP_DEFAULT_PRECIS,
			PROOF_QUALITY,
			FIXED_PITCH | FF_MODERN,
			L"Comic Sans MS"
			);
		SelectObject(GetDC(hWnd), hFont);
		SetTextColor(GetDC(hWnd), 0xff0000);
		TextOut(GetDC(hWnd), 10, 10, L"hello world", 11);
		EndPaint(hWnd, &ps);
		break;

hello world 是显示出来了,可是字体没有变化,把CreateFont放到WM_CREATE中也不行。

解决方案

20

检查函数返回值看能否成功
https://msdn.microsoft.com/en-us/library/dd183499.aspx

10

CreateFontW 不应该在WM_PAINT中执行,WM_PAINT事件时时刻刻在触发,相当于CreateFontW 执行了无数次。
CreateFontW 执行次数过多,将原因是资源不足,导致创建失败。就是这个“GDI”对象不足。
win32 api CreateFont不起作用

10

系统有没有自带Comic Sans MS字体?

10

这里有很多问题:
1. hdc = BeginPaint(hWnd, &ps); 都返回 hdc 了为何不用,而是反复的 GetDC?
请用 BeginPaint 返回的 hdc,或 ps.hdc。
2. GetDC 也需要对应的 ReleaseDC。你三次调用 GetDC 都释放了吗?
3. CreateFont 反复创建没关系,但是你没有对用 DeleteObject 去销毁。
最好在 WM_CREATE、WM_INITDIALOG 中创建,在 WM_SETFONT 中变更,在 WM_NCDESTROY 中销毁。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明win32 api CreateFont不起作用
喜欢 (0)
[1034331897@qq.com]
分享 (0)