Сообщений 0 Оценка 11 Оценить |
Обычно такая проблема возникает, когда вы пытаетесь выполнить код следующего вида:
POINT pt; GetCursorPos(&pt); HMENU hMenu; hMenu = LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1)); TrackPopupMenu(hMenu, 0, pt.x, pt.y, 0, hWnd, NULL); DestroyMenu(hMenu); |
В чём же здесь ошибка? Дело в том, что в Windows существует два совершенно разных вида меню - полоска меню (menu bar), которая традиционно размещается под заголовком окна, и всплывающее меню (popup menu). Работа и с тем, и с другим осуществляется с помощью хэндла типа HMENU. Это вносит некоторую путаницу, так как функции, предназначенные для работы с всплывающим меню, не могут работать с полоской меню, и наоборот.
Дескриптор всплывающего меню возвращают всего две функции - CreatePopupMenu и GetSubMenu. Именно эти функции можно использовать совместно с TrackPopupMenu(Ex). С другой стороны, функция LoadMenu загружает из ресурсов полоску меню, что и приводит к ошибке.
Описание и примеры использования функций CreatePopupMenu и GetSubMenu можно найти в статье "Как отобразить контекстное меню?".
Сообщений 0 Оценка 11 Оценить |