Правильный макрос для BOOL CDialog :: OnCommand (WPARAM wParam, LPARAM lParam) - PullRequest
0 голосов
/ 02 октября 2018

Я портирую на VS2017 приложение, ранее скомпилированное с VS6.Вот фрагмент кода, который не компилируется:

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);
    // ...
};

Thisобъявление соответствует сигнатуре CWnd::OnCommand, чтобы переопределить ее.

Однако, похоже, мне нужно использовать другой макрос, кроме 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);
}
...