在我的c ++代码中,我定义了一条消息,通知其他类做一些动作。代码如下:
在mainFrm.h中:
...
afx_msg LRESULT OnHandleDialog(WPARAM wParam, LPARAM lParam);
...
在mainFrm.cpp
中LRESULT CMainFrame::OnHandleDialog(WPARAM wParam, LPARAM lParam)
{
switch (wParam)
{
case Define::myCondition:
{
myFunction->doSomethingHere(static_cast<bool>(lParam)); //there is warning C4800: 'LPARAM' : forcing value to bool 'true' or 'false' (performance warning)
return 0;
}
}
return 0;
}
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
...
ON_MESSAGE(WM_DEFINED_DIALOG, OnHandleDialog) //My Message Mapping here
....
END_MESSAGE_MAP()
在另一个文件MyCode.h
中void sendDefinedMsg(DWORD_PTR wParam, DWORD_PTR data = 0)
{
pNotifyWnd->PostMessage(WM_DEFINED_DIALOG, wParam, data);
}
在另一个文件Mycode.cpp
中sendDefinedMsg( myCondition, false);
....
sendDefinedMsg( myCondition, true);
....
所以,您可以在上面的代码中看到,我想在这里获取message参数:
myFunction->doSomethingHere(static_cast<bool>(lParam));
问题是:无论我使用LPARAM lParam
或static_cast<bool>
还是reinterpret_cast<bool>
投放(bool)
。所有人都给了我一个警告:
警告C4800:'LPARAM':强制值为bool'true'或'false'(性能警告)
所以我的问题是:如何将lParam
投射到我原来传递的参数true
/ false
?
答案 0 :(得分:0)
我对我的代码进行了以下更改以实现我的目标:
在另一个文件Mycode.cpp
中sendDefinedMsg( myCondition, static_cast<DWORD_PTR>(0));
....
sendDefinedMsg( myCondition, static_cast<DWORD_PTR>(1));
....
消息处理代码中的,以下一些更改:
bool curValue = static_cast<DWORD_PTR>(lParam) == 0 ? false : true;
myFunction->doSomethingHere(curValue);
然后警告消失,价值正确。
实际上现在传递true / false应该没问题。也许有人告诉我如何传递其他类型的价值观,例如。 string或int等。
答案 1 :(得分:0)
我只输入以下内容就不会发出警告:
bool curValue = lParam;