WM_MENUGETOBJECT
От: Alexander92 Украина  
Дата: 14.03.11 20:27
Оценка:
Всем здравствуйте.
Столкнулся с такой проблемой: оконная процедура не ловит 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 ловится абсолютно правильно. Будут какие-то соображения?
Спасибо заранее.
Re: WM_MENUGETOBJECT
От: 3R  
Дата: 15.03.11 10:17
Оценка:
Здравствуйте, Alexander92, Вы писали:

A>Всем здравствуйте.

A>Столкнулся с такой проблемой: оконная процедура не ловит WM_MENUGETOBJECT. Привожу код:

A>

A>    // ...
A>    case WM_MENUGETOBJECT:
A>      // breakpoint - молчит
A>      break;
A>  }
A>  // ...
A>}
A>


Возможно, компилер выбрасывает из кода break. Попробуй добавить немного кода (например, вызов какой-нить функции, типа printf("WM_MENUGETOBJECT")) и на него поставить бряк.
Re[2]: WM_MENUGETOBJECT
От: Аноним  
Дата: 15.03.11 14:41
Оценка:
Здравствуйте, 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.