Строка меню в типичном окне является частью не-клиентской области окна. Он рисуется, когда WndProc получает сообщение WM_NCPAINT
и передает его DefWindowProc
, который является частью User32.dll - кода главного оконного менеджера.
Другие вещи, которые нарисованы в том же сообщении? Заголовок, границы окна, поля min / max / close. Все они нарисованы при обработке одного сообщения. Таким образом, чтобы скрыть меню для приложения, вам придется взять на себя обработку этого сообщения, что означает изменение поведения user32.dll. Сокрытие меню будет означать, что вы несете ответственность за рисование всех области, не являющейся клиентом.
И внешний вид всех этих элементов - заголовок, границы и т. Д. Меняется с каждой основной версией Windows. Таким образом, вы должны преследовать это также.
Это всего лишь одна из дюжины непреодолимых проблем с этой идеей. Даже Microsoft, вероятно, не смогла справиться с этим, и у них есть доступ к исходному коду user32.dll!
Было бы гораздо менее сложной задачей отобразить меню для каждого приложения в верхней части экрана, и даже это почти невозможная работа. Когда всплывает меню, происходит много взаимодействия с приложением, во время которого меню можно (и часто) изменять. Для очень характерно, что приложения изменяют состояние пунктов меню непосредственно перед их отрисовкой. Таким образом, вам придется копировать не только внешний вид меню, но и весь их поток сообщений взаимодействия с приложением.
То, что вы пытаетесь сделать, - это около дюжины невозможных заданий одновременно. Если вы попробуете это, вы, вероятно, многому научитесь, но вы никогда не заставите его работать.