为什么PostMessage lparam值在以下场景中显示错误的值

时间:2010-10-28 11:27:21

标签: mfc

我有一个父对话框和一个子对话框。当我使用PostMessageW(WM_SMESG,NULL,l_dvalue)将消息从子节点发送到父节点时;其中l_Value是double值,但是当我在父节点接收此消息时,我就是typcasting就像double l_value =(double)lParam;然后l_value中的值总是显示0.0但是值isend到parent是0.5是什么问题

1 个答案:

答案 0 :(得分:1)

将值0.5的两倍转换为整数将“向下舍入”;截断的小数更具体。从0.5截断.5的结果将始终为0.但是,lParam不足以保持双值(64位)(32位)。但是,假设float(32位)而不是double,您可以按如下方式执行:

  • 从float到long的基于位的“强制转换”:*((long*)(&myFloat))
  • 从长到浮动的基于比特的“强制转换”:*((float*)(&lParam))

或C ++方式:

  • 从float到long的基于位的“强制转换”:*reinterpret_cast<long*>(&myFloat)
  • 从长到浮动的基于比特的“强制转换”:*reinterpret_cast<float*>(&lParam)