Каков наилучший способ отправки плавающего в сообщении Windows с использованием операторов приведения в соответствие c ++?
Причина, по которой я спрашиваю, состоит в том, что подход, который впервые пришел ко мне, не работает.Для записи я использую стандартную функцию win32 для отправки сообщений:
PostWindowMessage(UINT nMsg, WPARAM wParam, LPARAM lParam)
Что не работает:
- Использование
static_cast<WPARAM>()
не работает, так как WPARAM
typedef'ed к UINT_PTR
и выполнит преобразование чисел из числа с плавающей точкой в целое число, эффективно обрезая значение с плавающей точкой. - Использование
reinterpret_cast<WPARAM>()
не работает, поскольку оно предназначено для использования с указателями и завершается с ошибкой компиляции.
В данный момент я могу придумать два обходных пути:
- Использование
reinterpret_cast
в сочетании с адресом оператора:
float f = 42.0f;
::PostWindowMessage(WM_SOME_MESSAGE, *reinterpret_cast<WPARAM*>(&f), 0);
- Использованиесоюз:
union { WPARAM wParam, float f };
f = 42.0f;
::PostWindowMessage(WM_SOME_MESSAGE, wParam, 0);
Какие из них предпочтительнее?Есть ли другой, более изящный способ сделать это?