Используя 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. Почему не работает команда клавиш?
Спасибо за прочтение. Любые идеи?