Я пишу программу, которая, помимо прочего, должна отображать контекстное меню при щелчке правой кнопкой мыши.Я перехватываю WM_NOTIFY
, идентификатор щелкающего элемента управления, и NM_RCLICK
.Все это прекрасно работает.
Проблема возникает, когда я обрабатываю этот щелчок правой кнопкой мыши:
case NM_RCLICK:
{
HMENU Popup = LoadMenu(0, MAKEINTRESOURCE(IDR_NED_MENU));
if ( !Popup ) {
DWORD err = GetLastError();
char* buf;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_ALLOCATE_BUFFER, 0, err, 0, buf, 1<<19, 0);
_ERROR("LoadMenu(0, MAKEINTRESOURCE(IDR_NED_MENU)); Error '%s' thrown; no menu loaded.", buf);
delete [] buf;
}
Popup = GetSubMenu(Popup, 0);
CheckMenuItem(Popup, 1, MF_CHECKED|MF_BYPOSITION);
POINT Point;
GetCursorPos(&Point);
switch (TrackPopupMenu(Popup, TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RETURNCMD, Point.x, Point.y, 0, GetActiveWindow(), NULL)) {
// ...
В основном, LoadMenu(0, MAKEINTRESOURCE(IDR_NED_MENU));
возвращает NULL
, и я получаюсообщение об ошибке, в котором говорится, что «указанное имя ресурса не может быть найдено в файле изображения».
Теперь IDR_NED_MENU - это идентификатор меню, которое есть в файле .rc
, и я включилсоответствующий .rc.h
файл в этом .cpp
файле.Фактические идентификаторы диалогового окна, содержащиеся в том же файле .rc
, работают отлично.Этот код затем копируется и вставляется из другого проекта, в котором вызов LoadMenu
работал отлично: я действительно воссоздал IDR_NED_MENU
с нуля, хотя идентификаторы несколько отличаются (но они действительно совпадают между файлом .rc
и.cpp
файл с фрагментом кода, который я вставил сюда);Первоначально я случайно создал меню в отдельном файле .rc
, поэтому попытался исправить это здесь.Я заметил, что в представлении ресурсов Visual Studio диалоговые окна содержатся в папке «Диалог», в то время как они содержатся в папке «Меню» (разумно), но я не уверен, какая разница, если таковая имеется,
* 1022.* Почему я получаю эту ошибку?Почему он не может найти
IDR_NED_MENU
?
Я использую Visual Studio 2010, и это не проект MFC.Я не уверен, что, если таковые имеются, другие соответствующие детали, которые я должен включить;дайте мне знать в комментариях, и я буду редактировать-обновлять.
Спасибо.