почему значение lparam PostMessageW показывает неправильное значение в следующем scenerio - PullRequest
0 голосов
/ 28 октября 2010

У меня есть родительское диалоговое окно и дочернее диалоговое окно. Когда я отправляю сообщение от ребенка к родителю, используя PostMessageW (WM_SMESG, NULL, l_dvalue), где l_Value - двойное значение, но когда я получаю это сообщение в родительском, а затем я набор текста типа double l_value = (double) lParam, затем значение в l_value всегда показывает 0.0, но значение isend to parent было 0.5, в чем проблема

1 Ответ

1 голос
/ 28 октября 2010

Преобразование двойного значения 0,5 в целое число будет «округлено»;десятичные дроби усекаются, чтобы быть более конкретными.Результат усечения .5 из 0,5 всегда будет 0. Однако lParam недостаточно велик (32 бита) для хранения двойного значения (64 бита).Но, предполагая float (32 бита) вместо double, вы можете сделать это следующим образом:

  • Битовое "приведение" от float к long: *((long*)(&myFloat))
  • Bit-на основе «броска» от long к float: *((float*)(&lParam))

Или в C ++:

  • Битовое «приведение» от float к long: *reinterpret_cast<long*>(&myFloat)
  • Бит на основе "броска" из long в float: *reinterpret_cast<float*>(&lParam)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...