使用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()。