首页 > 解决方案 > BOOL CDialog::OnCommand(WPARAM wParam, LPARAM lParam) 的正确宏

问题描述

我正在将以前用 VS6 编译的应用程序移植到 VS2017。这是一段无法编译的代码:

BEGIN_MESSAGE_MAP(CVBindings, CDialog)
    //{{AFX_MSG_MAP(CVBindings)
   ON_COMMAND( IDC_BALT, OnCommand )
   ON_COMMAND( IDC_BCONTROL, OnCommand )
   // ...
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

编译器错误是:

error C2440: 'static_cast': cannot convert from 'BOOL (__thiscall CVBindings::* )(WPARAM,LPARAM)' to 'AFX_PMSG'
note: None of the functions with this name in scope match the target type

该函数声明为:

class CVBindings : public CDialog {
    // ...
    virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
    // ...
};

此声明匹配CWnd::OnCommandso 的签名以覆盖它。

但是,似乎我需要使用其他宏而不是ON_COMMAND. 你能建议哪一个以及如何使用它吗?(我对 MFC 一点也不熟悉)

更新:根据评论中的要求,以下是以下定义的部分CVBindings::OnCommand

BOOL CVBindings::OnCommand(WPARAM wParam, LPARAM lParam) 
{
    // ...
    // Some logic using just LOWORD(wParam), returning TRUE in some cases
    // ... 
    // Otherwise
    return CDialog::OnCommand(wParam, lParam);
}

标签: c++windowsvisual-c++mfcdialog

解决方案


推荐阅读