使用 C++ 转换运算符在 Windows 消息中发送 float 的最佳方法是什么?
我问的原因是我首先想到的方法没有用。作为记录,我使用标准的 win32 函数发送消息:
PostWindowMessage(UINT nMsg, WPARAM wParam, LPARAM lParam)
什么不起作用:
- >
使用
static_cast<WPARAM>()
自WPARAM
起不工作类型定义为UINT_PTR
并将进行从 float 到 int 的数字转换,有效地截断 float 的值。 -
使用
reinterpret_cast<WPARAM>()
不起作用,因为它用于指针并因编译错误而失败。
目前我能想到两种解决方法:
-
使用
reinterpret_cast
连同运营商的地址:float f = 42.0f; ::PostWindowMessage(WM_SOME_MESSAGE, *reinterpret_cast<WPARAM*>(&f), 0);
-
使用 union :
union { WPARAM wParam, float f }; f = 42.0f; ::PostWindowMessage(WM_SOME_MESSAGE, wParam, 0);
哪些是首选?有没有其他更优雅的方式来完成这个?
最佳答案
使用 reinterpret_cast< WPARAM &>(f)
.此转换不限于指针,它也适用于引用。
关于c++ - 如何在窗口消息中发送 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2498755/