c++ - WM_GETFONT 返回类型 LRESULT 而不是预期的 HFONT

标签 c++ winapi

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);

关于c++ - WM_GETFONT 返回类型 LRESULT 而不是预期的 HFONT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14467573/

相关文章:

c++ - 带有函数的c++类模板

c++ - 使用 automake 和 autoconf 包含动态库

c++ - WM_PAINT 与 PROGRESS_CLASS

c# - 在窗口打开时获得通知的最有效方式

c++ - 通过const值返回并分配给非const变量进行编译

c++ - 字符串 vector (从键盘读取)

c++ - 带有条件的 Arrayfire 错误

windows - 如何使文件系统缓存失效?

c - 通过断点续传上传请求的 google Drive 失败,返回错误代码 12156。如果有人知道这一点,请回复?

java - Delphi Win32和JAVA?