HFONT childfont = SendMessage (childwin, WM_GETFONT, NULL, NULL);
导致错误“从‘LRESULT’到‘HFONT__*’的无效转换”当MSDN states返回类型是 HFONT。这个函数的正确返回类型是什么?我应该只使用 LRESULT 还是我必须做一些特别的事情,因为如果我不这样做,我的程序稍后会回来咬我?
SendMessage
是一把瑞士军刀:它做了很多不同的事情,所有这些都返回各种类型的值。由于 C 不支持重载返回值(记住 Win32 API 是 C API),它必须返回一个通用的 LRESULT
。类型。
因此,您需要将结果转换为实际类型。文档指出此消息返回 HFONT
,因此您必须将结果转换为 HFONT
:
HFONT childFont = (HFONT)SendMessage(childWin, WM_GETFONT, ...);
或者,您可以使用宏 GetWindowFont()
在头文件中定义<WindowsX.h>
,其中包含很多实用程序宏:
// From WindowsX.h. SNDMSG is a macro which expands to either SendMessage or
// AfxSendMessage.
#define GetWindowFont(hwnd) FORWARD_WM_GETFONT((hwnd), SNDMSG)
#define FORWARD_WM_GETFONT(hwnd, fn) \
(HFONT)(UINT_PTR)(fn)((hwnd), WM_GETFONT, 0L, 0L)
// Example usage:
HFONT childFont = GetWindowFont(childWin);
我是一名优秀的程序员,十分优秀!