Как создать современные меню в Win Api? - PullRequest
2 голосов
/ 03 июля 2011

Под современными меню Я имею в виду меню, подобные тем, которые созданы с использованием MFC или Windows Forms (MenuStrips) . Я знаю, что это возможно, так как я видел некоторые приложения, которые используют его, которые разработаны в Windows Api. Это также было сделано в библиотеке Win32 ++ , и MFC и WinForms - это просто оболочки Win Api, поэтому, если они содержат современные меню, Win Api также должен содержать их. Но мой вопрос ... Как я могу сделать Menustrip непосредственно в Windows Api? Включено ли оно в CommonControls ? Или я должен реализовать это сам? Если так то как? Пример кода необходим, но не обязателен.

Меню примерно так

enter image description here

Ответы [ 5 ]

2 голосов
/ 03 июля 2011

MFC и Winforms используют очень похожие подходы для реализации этих пользовательских меню.Они начинают с общей поддержки в своих классах ToolBar / ToolStrip и специализируют их для строки меню / классов элементов.

Вы найдете реализацию MFC в vc / atlmfc / src / mfc.Файлы исходного кода afxtoolbarxxx.cpp содержат около 24 000 строк кода C ++.Специализации классов меню находятся в afxmenuxxx.cpp, еще несколько тысяч строк исходного кода.

Вы можете получить исходный код для классов Winform из справочного источника.Файлы исходного кода ToolStripxxx.cs содержат около 40 000 строк кода C #.Специализации классов меню представлены в Menuxxx.cs, еще несколько тысяч строк исходного кода.

Оба используют множество классов поддержки, предоставляемых в их соответствующих платформах, базовые вещи, такие как обертки окон и поддержку рендеринга изображений / текста.Трудно предположить, сколько из этого они потянули.

Числа, подобные этому, примерно на порядок превышают то, что большинство программистов сочли бы целесообразным переписать самим.Вы, безусловно, можете добиться большего успеха, сбрив функции, и в реализациях MFC, и в Winforms есть много наворотов.Winforms тем более, основная причина, по которой он имеет гораздо больше исходного кода.Однако этот вид поддержки функций был добавлен с явным намерением предоставить библиотеку классов, которую вы бы использовали вместо попытки заменить.Рекомендуется.

1 голос
/ 03 июля 2011

MFC и WinForms являются просто оболочками Win Api, поэтому, если они содержат современные меню, Win Api также должна содержать их

Это не так.Основной код обработки меню существует в библиотеках кода Win32 (в основном user32.dll), и это позволяет вам создавать, рисовать и обрабатывать сообщения, чтобы заставить меню работать, но они являются очень простыми меню (просто текст).MFC работает, вызывая функции Win32 и обрабатывая сообщения точно так же, как и все остальные, но он использует пользовательские процедуры рисования, чтобы оживить их внешний вид.И это именно так, как это делает любая другая библиотека.Единственный другой способ сделать это - нарисовать все меню самостоятельно (это просто другое окно), нарисовать любые значки, обработать выделение при наведении на него мыши, обработать нажатия кнопок и т. Д., Все самостоятельно, что является пустой тратой времениесли вам удастся заставить Win32 сделать это.

Итак, если вы хотите, чтобы меню выглядели так, вы должны либо сами их кодировать, либо использовать библиотеку, которую закодировали другие.Это так просто.

0 голосов
/ 03 июля 2011

Вам понадобится сторонняя библиотека, такая как CodeJock's Extreme Toolkit .

Если вы не можете позволить себе бюджет, вы можете найти Code Project для получения бесплатного исходного кода.

0 голосов
/ 03 июля 2011

перейдите на http://www.winprog.org/tutorial/simple_window.html, вы найдете все об учебниках по программированию оконного API

0 голосов
/ 03 июля 2011

Возможно, вам придется реализовать его самостоятельно или использовать стороннюю реализацию.

См .: Как изменить внешний вид меню Windows 7?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...