Я создаю игру с использованием MFC, и теперь я программирую создателя уровней. Чтобы пользователь мог выбрать, какой блок нужно создать, я использую SplitButton. Я создал ресурс меню для сопряжения с моим SplitButton, но я хочу, чтобы каждый из пунктов меню что-то делал. Чтение документации о том, как назначить afx_msg void OnOptionSelected()
на событие, используя BEGIN_MESSAGE_MAP
Я нашел это:
//Microsoft Documentation Code
BEGIN_MESSAGE_MAP(CMyDoc, CDocument)
ON_COMMAND(ID_MYCMD, &CMyDoc::OnMyCommand)
END_MESSAGE_MAP()
И я сделал то же самое с моим кодом, создав afx_msg
для каждого из моих пунктов меню в моем ресурсе меню
//My code in CCreateWindow.h (Inside DECLARE_MESSAGE_MAP())
afx_msg void OnToughBlockChosen();
afx_msg void OnSturdyBlockChosen();
afx_msg void OnWeakBlockChosen();
afx_msg void OnSpecialBlockChosen();
afx_msg void OnIndestructibleBlockChosen();
И, таким образом, их назначение
//My code in CCreateWindow.cpp (Inside BEGIN_MESSAGE_MAP)
ON_COMMAND(ID_CHOOSEBLOCKTYPE_TOUGHBLOCK, &CCreateWindow::OnToughBlockChosen())
ON_COMMAND(ID_CHOOSEBLOCKTYPE_STURDYBLOCK, &CCreateWindow::OnSturdyBlockChosen())
ON_COMMAND(ID_CHOOSEBLOCKTYPE_WEAKBLOCK, &CCreateWindow::OnWeakBlockChosen())
ON_COMMAND(ID_CHOOSEBLOCKTYPE_SPECIALBLOCK, &CCreateWindow::OnSpecialBlockChosen())
ON_COMMAND(ID_CHOOSEBLOCKTYPE_INDESTRUCTIBLEBLOCK, &CCreateWindow::OnIndestructibleBlockChosen())
Но когда я сделал это, ошибка E024 a nonstatic member reference must be relative to a specific object
появляется. Пока у меня есть представление о том, как это можно решить (ON_COMMAND(ID_CHOOSEBLOCKTYPE_TOUGHBLOCK, &m_CreateWindow.OnToughBlockChosen())
) но я просто не знаю, если это способ исправить это, и если это так, я не знаю, где объявить объект, так как я пытался сделать это в .h
а также .cpp
и никто не работал. Я просто не знаю, что делать сейчас, так как я сделал то же самое, что и в документации Microsoft, и там прямо сказано:
ON_COMMAND
макрос используется для обработки командных сообщений, генерируемых меню, кнопками и клавишами ускорения.
Задача ещё не решена.
Других решений пока нет …