c++ - 如何在窗口消息中发送 float

标签 c++ winapi

使用 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/

相关文章:

c++ - GUI框架类的设计

c++ - GMOCK如何为函数参数赋值

c++ - 读取包含 16 位签名数据的文件

c++ - 为什么首选异步IO

c++ - 将 BSTR 转换为 int

c++ - googlemock:模拟一个本地对象

c++ - 编译器在多大程度上将动态绑定(bind)更改为静态绑定(bind)?

c - createprocess 函数的困难时期

windows - Windows 8.1 的操作系统版本是什么?

windows - 如何在控制台中检测当前是否启用 Windows 10 缓冲区包装模式