如何将LPARAM值转换为我传递的类型

时间:2018-03-26 05:26:04

标签: c++ mfc

在我的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 lParamstatic_cast<bool>还是reinterpret_cast<bool>投放(bool)。所有人都给了我一个警告:

  

警告C4800:'LPARAM':强制值为bool'true'或'false'(性能警告)

所以我的问题是:如何将lParam投射到我原来传递的参数true / false

2 个答案:

答案 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;