Невозможно связать afx_msg в BEGIN_MESSAGE_MAP - PullRequest
1 голос
/ 20 сентября 2010

Я пытаюсь подключиться к функции OnSysCommand, но получаю странную ошибку.

В шапке я объявляю функцию как:

afx_msg void OnSysCommand(UINT nID, LPARAM lParam );

А в cpp код:

BEGIN_MESSAGE_MAP(CMFCTest1App, CWinAppEx)
 ON_COMMAND(ID_APP_ABOUT, &CMFCTest1App::OnAppAbout)
 // Standard file based document commands
 ON_COMMAND(ID_FILE_NEW, &CWinAppEx::OnFileNew)
 ON_COMMAND(ID_FILE_OPEN, &CWinAppEx::OnFileOpen)
 ON_WM_SYSCOMMAND()
END_MESSAGE_MAP()

void CMFCTest1App::OnSysCommand(UINT nID, LPARAM lParam )
{
 AfxMessageBox(L"System command recieved");
}

При компиляции я получаю следующее сообщение об ошибке:

1>  MFCTest1.cpp
1>c:\users\dell3\documents\visual studio 2010\projects\mfctest1\mfctest1\mfctest1.cpp(43): error C2440: 'static_cast' : cannot convert from 'void (__thiscall CMFCTest1App::* )(UINT,LPARAM)' to 'void (__thiscall CWnd::* )(UINT,LPARAM)'
1>          Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>
1>Build FAILED.

То же самое происходит, когда я пытаюсь подключиться к функции OnClose. Любые предложения будут высоко ценится. Спасибо.

Ответы [ 3 ]

2 голосов
/ 20 сентября 2010

Переместите обработчики из класса приложения в класс окна или фрейма.

Эти сообщения предназначены для обработки в классе окна (производном от CWnd), а не в классе приложения (получено из CWinApp).

0 голосов
/ 20 сентября 2010

Ваш CMFCTest1App класс не должен наследоваться от CWnd. Это нормально, так оно и есть. Также вы можете оставить обработчики команд ID_FILE_OPEN и т. Д. В этом классе. Это немного сбивает с толку новичков, но на самом деле имеет смысл.

Обработчик сообщений OnSysCommand() не является одним из этих исключений. Как уже упоминали другие, это относится к определенному окну. Документ WM_SYSCOMMAND. подробно объясняет что он делает.

Итак, переместите обработчик команд в окно, к которому он принадлежит, и все хорошо.

0 голосов
/ 20 сентября 2010

Я думаю, что ваш CMFCTest1App должен наследоваться от CWnd. В любом случае, проще использовать мастер для создания сопоставлений сообщений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...