Проект, над которым я сейчас работаю, по сути является версией Ultramon с открытым исходным кодом (программа для работы с несколькими задачами). Таким образом, думайте, что приложение похоже на панель задач Windows. Кнопки для каждого окна и т. Д. Это кодируется в C / C ++ с использованием WinAPI
Я только начал это делать, и у меня отключены некоторые функции. Тем не менее, я застреваю при получении системных меню (например, меню, которое вы получаете, когда вы щелкаете правой кнопкой мыши на кнопке на панели задач), показывая, когда и где я хочу, чтобы они.
Я пытаюсь использовать:
HMENU menu = GetSystemMenu(item, false);
SetForegroundWindow(hWnd);
TrackPopupMenu(menu, TPM_LEFTALIGN | TPM_BOTTOMALIGN, 0, 0, 0, hWnd, NULL);
PostMessage(hWnd, WM_NULL, 0, 0);
пункт - это HWND, для которого я хочу меню, hWnd - это HWND для кнопки / элемента, на котором я хочу, чтобы меню отображалось. (пока показывает 0, 0, верхний левый угол моего основного монитора).
Этот код отлично работает каждый раз для системного меню, которое настраивается. Например: это НЕ стандартное меню просто «Восстановить», «Развернуть» и т. Д. И т. Д., В него добавлены некоторые пункты меню. Эти меню всегда будут отображаться там, где я хочу.
Однако базовые системные меню по умолчанию (например, те, которые имеют только «Развернуть», «Восстановить», «Закрыть» и т. Д.) Будут отображаться ТОЛЬКО в первый раз, когда я их использую. После этого они отказываются появляться. Если я не перезагружаю компьютер, запускаю его снова, и в этот момент они работают отлично.
Примечание: SetForegroundWindow(hWnd);
и PostMessage(hWnd, WM_NULL, 0, 0);
находятся там, потому что я где-то читал, что системное меню будет работать только в первый раз, если я не выполнил этот трюк с выводом его на передний план, но он все еще не работает правильно.
Так у кого-нибудь есть идеи, как заставить это работать правильно? Или почему он работает только в первый раз после перезагрузки компьютера?
Только что проверил что-то, он также покажет системное меню для окна, если я закрою окно (например, выйду из программы) и снова открою его. Но еще раз, он покажет это только один раз, затем он перестает работать.