Как поставить кнопку закрытия в главном меню? - PullRequest
2 голосов
/ 28 мая 2011

Я хочу добавить кнопку «Закрыть» в меню моего главного окна. Пример можно найти на картинке здесь: http://ifyoucodeittheywill.com/img/crimson-editor.png

(Итак, в области заголовка окна есть обычная кнопка закрытия, но в строке меню окна также есть кнопка закрытия - в крайнем правом углу).

Я использую базовые API Win32, хотя пример с использованием MFC тоже подойдет.

Кто-нибудь знает, как это сделать?

Спасибо, Andrew

Ответы [ 3 ]

2 голосов
/ 28 мая 2011

Эти кнопки обычно поставляются с окнами MDI.Однако я почти уверен, что изображенное приложение использует либо свой собственный, либо, скорее всего, какой-то продвинутый сторонний инструментарий.Потому что, если честно, то, что Windows API и MFC (которые являются просто классической оболочкой для Windows API) дают вам для программирования GUI, неоправданно ограничено.

Если вы хотите создавать аккуратные интерфейсы, держитесь подальше от MFCи лучше взглянуть на что-то вроде Qt, wxWidgets или тому подобное.

1 голос
/ 29 мая 2011

Действительно простой способ сделать это - использовать обычный пункт меню, используя AppendMenu, но использовать следующие флаги:

  • MF_BITMAP с растровым изображением кнопки закрытия или MF_OWNERDRAW или для рисования самостоятельно
  • MF_HELP (он же WM_RIGHTJUSTIFY), не очень хорошо документированный флаг, который будет оправдывать пункт справа.

Вот одна ссылка на MF_HELP, которую я нашел в msdn - на самом деле речь идет об использовании Win32 API для выравнивания по правому краю пункта меню, но с использованием Visual Basic.

MF_HELP (определено в winuser.h) является чем-то вроде пережитка Win16 дней, тогда конвенция заключалась в том, чтобы выровнять пункт меню Справка по правому краю, чтобы он оставался в стороне. Он был переименован - добавлен дополнительный #define с тем же значением - в WM_RIGHTJUSTIFY вокруг Win95.

Обратите внимание, что пункты растрового меню недоступны (например, пользователям, которые полагаются на программу чтения с экрана, чтобы считывать, где они находятся на экране); если использовать такой подход, то, по крайней мере, добавьте обычный пункт меню «Закрыть» в другом месте меню (например, в разделе «Файл»), чтобы пользователю не пришлось полагаться на этот элемент, а также можно было закрыть его обычными средствами. Также обязательно используйте ярлык Ctrl-F4, который используется большинством приложений, поддерживающих несколько документов или вкладок, для закрытия текущего элемента.

0 голосов
/ 31 мая 2011

Ни в коем случае не пытайтесь создать это поведение самостоятельно.Это функциональность, которую вы получаете «бесплатно», если вы используете архитектуру MDI MFC.Кнопка закрытия «рядом с меню» при ее вызове закрывает активное дочернее окно MDI.Если вы не используете архитектуру MDI, то нет смысла пытаться добавить туда кнопку закрытия.Можете ли вы объяснить, если вы используете архитектуру MDI?

...