Всем здравствуйте.
Столкнулся с такой проблемой: оконная процедура не ловит
WM_MENUGETOBJECT.

Привожу код:
// Инициализация экземпляра
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
// ...
HMENU hMainMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDC_MAIN_MENU));
MENUINFO menuInfo = {0};
menuInfo.cbSize = sizeof(MENUINFO);
menuInfo.fMask = MIM_STYLE | MIM_APPLYTOSUBMENUS;
menuInfo.dwStyle = MNS_DRAGDROP;
SetMenuInfo(hMainMenu, &menuInfo);
SetMenu(hMainWnd, hMainMenu);
// ...
}
// Оконная процедура
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch(message) {
// ...
case WM_MENUGETOBJECT:
// breakpoint - молчит
break;
}
// ...
}
Отмечу, что
WM_MENUDRAG ловится абсолютно правильно. Будут какие-то соображения?
Спасибо заранее.
Здравствуйте, Alexander92, Вы писали:
A>Всем здравствуйте.
A>Столкнулся с такой проблемой: оконная процедура не ловит WM_MENUGETOBJECT.
Привожу код:
A>
A> // ...
A> case WM_MENUGETOBJECT:
A> // breakpoint - молчит
A> break;
A> }
A> // ...
A>}
A>
Возможно, компилер выбрасывает из кода break. Попробуй добавить немного кода (например, вызов какой-нить функции, типа printf("WM_MENUGETOBJECT")) и на него поставить бряк.
Здравствуйте, 3R, Вы писали:
3R>Здравствуйте, Alexander92, Вы писали:
A>>Всем здравствуйте.
A>>Столкнулся с такой проблемой: оконная процедура не ловит WM_MENUGETOBJECT.
Привожу код:
A>>
A>> // ...
A>> case WM_MENUGETOBJECT:
A>> // breakpoint - молчит
A>> break;
A>> }
A>> // ...
A>>}
A>>
3R>Возможно, компилер выбрасывает из кода break. Попробуй добавить немного кода (например, вызов какой-нить функции, типа printf("WM_MENUGETOBJECT")) и на него поставить бряк.
3R, пробовал. Эффект нулевой. Кроме того, под строкой
// breakpoint - молчит
понимается как раз строка вида:
MessageBox(...); // breakpoint is here