Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с WM_MENUGETOBJECT

278
13 марта 2011 года
Alexander92
1.1K / / 04.08.2008
Всем доброго времени суток.
Столкнулся с абсолютно глупой проблемой: не могу отловить сообщение WM_MENUGETOBJECT от drag-n-drop меню. Кто-нибудь может привести рабочий пример? Ибо я перерыл пол-Интернета с нулевым результатом.

Привожу свой код:
Код:
// Инициализация экземпляра
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 приходит совершенно правильно. Будут какие-то идеи?
Спасибо всем заранее.
535
15 марта 2011 года
Нездешний
537 / / 17.01.2008
Попробовал - результат такой же. Насколько я понял из обрывочных сообщений на форумах, народ вызывает DoDragDrop в обработчике WM_MENUDRAG и дальше работает через COM-интерфейсы.

Кстати, что именно сделать-то хочешь?
278
15 марта 2011 года
Alexander92
1.1K / / 04.08.2008
Цитата: Нездешний
Кстати, что именно сделать-то хочешь?


Есть TabControl, в каждой вкладке открыт некий файл. Есть меню "Окно", дублирующее список открытых файлов. Нужно реализовать "перетаскивания" пунктов меню "Окно" и, соответственно, менять порядок расположения вкладок (сама операция перетаскивания должна быть в стиле, например, перетягивания пунктов "Избранного" в IE). На данный момент готово все, кроме самого перетаскивания.


Цитата: Нездешний

Насколько я понял из обрывочных сообщений на форумах, народ вызывает DoDragDrop в обработчике WM_MENUDRAG и дальше работает через COM-интерфейсы.


Да, это я читал; вопрос в том, должно ли WM_MENUGETOBJECT приходить независимо от DoDragDrop или же оно есть следствием вызова этой функции? В документации я этого, увы, не нашел.

10
15 марта 2011 года
Freeman
3.2K / / 06.03.2004
Я бы всё же MENUINFO после инициализации cbSize заполнял вызовом GetMenuInfo, после чего накатывал бы новые параметры.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог