Arhn - архитектура программирования

Win32 - Полноэкранное всплывающее меню темпераментной активации

Используя C ++ в VS2008, я нахожусь в самом начале программы DirectX, которая пока может отображать изображение токена и без проблем переключаться между полноэкранным и оконным режимами.

У него есть строка меню, которая, как и ожидалось, невидима в полноэкранном режиме. Клавиша ALT все еще могла активировать это меню в полноэкранном режиме, но это было очень неуклюже, поскольку его элементы не были видны, пока не были выделены, и даже тогда она реагировала только примерно на 1 из 5 нажатий клавиши ALT.

Поэтому я решил вместо этого реализовать всплывающее меню, реагирующее на правую кнопку мыши. Моя проблема в том, что это всплывающее меню также темпераментно в полноэкранном режиме. Он также играет с настраиваемым курсором, который я использую.

Неправильное поведение определяется следующим образом:

1 · Щелчок правой кнопкой мыши в любом месте активирует всплывающее меню, но также деактивирует пользовательский курсор и заменяет его системным по умолчанию.

2 · Когда меню становится видимым, щелчок ПРАВОЙ кнопкой за пределами меню деактивирует его, но при этом курсор по умолчанию остается включенным. Однако повторный щелчок правой кнопкой мыши снова активирует меню, и это продолжается отлично, если бы не отсутствующий пользовательский курсор.

3 · Когда меню становится видимым, щелчок ЛЕВОЙ кнопкой за пределами меню деактивирует его, и при этом снова отображается пользовательский курсор. Теперь это становится немного более беспорядочным, потому что теперь:
3a · Если я щелкну правой кнопкой мыши, он вернется к шагу 1. Меню включено + курсор выключен.
3b · < / strong> Если я щелкну левой кнопкой мыши второй раз (как будто я получаю фокус или что-то в этом роде), то щелчок правой кнопкой мыши активирует курсор по умолчанию, но НЕ активирует меню (как если бы я половину сделал, а половина не восстановила фокус что ли). Меню выключено + курсор выключен.
3c · Если я наведу указатель мыши, а затем щелкну правой кнопкой мыши, произойдет одно из указанных выше действий. Шаг 1 или шаг 3b. Меню включено + курсор выключен или меню выключен + курсор выключен. Раздражающий.

4 · Наиболее очевидно, что если происходит шаг 3b (меню выключено + курсор выключен), пользователь может бесконечно включать и выключать пользовательский курсор. Щелкните левой кнопкой мыши, щелкните правой кнопкой мыши. Мало того, что меню никогда не появляется, это просто не то, что я хочу, чтобы пользователь видел в моей программе ... курсор меняется без причины.

Я предполагаю, что изменение курсора связано с тем, что само меню находится в фокусе или что-то в этом роде. Я бы хотел, чтобы этого избежать, если возможно, но настоящая проблема в том, почему активация меню вообще такая темпераментная?

Мой код для всплывающего меню:

case WM_RBUTTONDOWN:
    cout << "Right button in fullscreen" << endl;

    TrackPopupMenu(GetSubMenu(g_menu,0), TPM_LEFTALIGN|TPM_HORPOSANIMATION, 
    30, 30, 0, g_parentWindow, NULL);

    // SetActiveWindow(g_parentWindow);  // Makes no difference.
    // SetForegroundWindow(g_parentWindow);  // Makes no difference.

break;

Еще кое-что. Если вместо этого я использую F3 для активации меню, ничего не происходит.

Проблема 1. Можно ли сделать так, чтобы меню активировалось надежно?
Проблема 2: Можно ли остановить изменение курсора?
Проблема 3. Почему не работает команда клавиш?

Спасибо за прочтение. Любые идеи?


Ответы:


1

вы можете использовать эту небольшую функцию, чтобы вернуть курсор к вашему настраиваемому курсору SetCursor(CURSOR_ID); вы можете добавить это в WM_RBUTTONDOWN

03.11.2010
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..


© 2024 arhn.ru, Arhn - архитектура программирования