Используя C ++ в VS2008, я начинаю программу DirectX, которая до сих пор без проблем отображала изображение токена и переключалась между полноэкранным и оконным режимами.
Имеет строку меню, которая невидима, как и ожидалось в полноэкранном режиме.Клавиша ALT все еще могла активировать это меню в полноэкранном режиме, но оно было очень неуклюжим, поскольку его элементы не были видны до тех пор, пока не были выделены, и даже тогда оно реагировало только примерно на 1 из 5 нажатий клавиши ALT.Я решил реализовать всплывающее меню, которое реагирует на правую кнопку мыши.Моя проблема в том, что это всплывающее меню также является темпераментным в полноэкранном режиме.Он также играет с пользовательским курсором, который я использую.
Неправильное поведение определяется следующим образом:
1 · Щелчок правой кнопкой мыши в любом месте активирует всплывающее меню, нотакже деактивируйте пользовательский курсор и замените его системным значением по умолчанию.
2 · Как только меню станет видимым, нажатие ПРАВОЙ кнопкой мыши вне меню отключит его, но при этом курсор по умолчанию останетсяна.Однако, если снова щелкнуть правой кнопкой мыши, меню снова активируется, и это будет продолжаться идеально, если не для отсутствующего пользовательского курсора.
3 · Как только меню станет видимым, щелчок ВЛЕВОЙ за пределами меню деактивирует его, и при этом снова отобразится пользовательский курсор.Теперь он становится немного более грязным, потому что теперь:
3a · Если я щелкну правой кнопкой мыши, он вернется к шагу 1. Меню вкл. + Курсор выключен.
3b · Если я щелкну левой кнопкой мыши второй раз (как будто я получаю фокус или что-то еще), то щелчок правой кнопкой мыши активирует курсор по умолчанию, но НЕ активирует меню (как если бы я наполовину не сделал, а половина не восстановила фокус иличто-то).Меню выключено + курсор выключен.
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;
Oneеще вещь.Если я вместо этого использую F3 , чтобы активировать меню, абсолютно ничего не происходит.
Проблема 1: Могу ли я обеспечить надежную активацию меню?
Проблема 2: Могу ли я остановить изменение курсора?
Проблема 3: Почему не работает ключевая команда?
Спасибо за прочтение.Есть идеи?