使用SendMessage() 方法时候发现程序字体总是不能达到想要的效果,尝试有Setfont() 去完成时候却可以实现:
// global define
CFont ResultFont;
ResultFont.CreateFont(
50,
0,
0,
0,
FW_NORMAL,
FALSE,
FALSE,
0,
ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_SWISS,
_T("Arial") );
(CStatic*)this->GetDlgItem(IDC_STATIC_FONT)->SetFont(&ResultFont,TRUE); //正常工作
//::SendMessage(::GetDlgItem(this->m_hWnd,IDC_STATIC_FONT),WM_SETFONT,(WPARAM)(&ResultFont),MAKELPARAM(TRUE,0)); 不正常
SendDlgItemMessage(IDC_STATIC_FONT,WM_SETFONT,(WPARAM)(&ResultFont)->GetSafeHandle(),MAKELPARAM(TRUE,0)); 正常
SendMessage(
(HWND) hWnd, // handle to destination window
WM_SETFONT, // message to send
(WPARAM) wParam, // handle to font
(LPARAM) lParam // redraw option
);
MSDN 里面SendMessage() 里面使用WM_SETFONT参数 wParam 必须使用自己定义的FONT的句柄,而不是使用 FONT 定义的内容。所以错误发生在:
(WPARAM)(&ResultFont) 而应该使用 (WPARAM)(&ResultFont)->GetSafeHandle()。