Сообщений 0    Оценка 11        Оценить  
Система Orphus

Почему вместо нормального контекстного меню появляется узкая полоска?

Автор: Александр Шаргин
Опубликовано: 22.06.2001
Исправлено: 13.03.2005
Версия текста: 1.0

Обычно такая проблема возникает, когда вы пытаетесь выполнить код следующего вида:

    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        Оценить