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

how to convert LPARAM value to the type I passed

本文关键字:类型 转换 lparam      更新时间:2023-10-16

在我的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);
....

因此,您可以在上面的代码中看到,我想在此处获取消息参数:

myFunction->doSomethingHere(static_cast<bool>(lParam));

问题是:无论我将LPARAM lParam施放到什么,使用static_cast<bool>reinterpret_cast<bool>(bool)。他们都给我一个警告:

警告c4800:'lparam':强迫价值bool'true'或'false'(性能警告(

所以我的问题是:我应该如何将lParam施加到我的原始传递参数true/false

我对我的代码进行以下更改以实现我的目标:

在另一个文件中,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应该没问题。也许有人告诉我如何通过其他类型的价值观,例如。字符串或int等。

我只输入时没有警告:

bool curValue = lParam;