Подскажите, как сделать меню в Visual C++ (надо, чтобы примерно как в делфи было, то есть форма, кнопки и другие элементы). Как это реализовать на Си? Или подскажите, в какой литературе это есть.
Отслеживать
51.1k 83 83 золотых знака 262 262 серебряных знака 500 500 бронзовых знаков
задан 3 мар 2011 в 19:44
1 1 1 серебряный знак 1 1 бронзовый знак
5 ответов 5
Сортировка: Сброс на вариант по умолчанию
Первым делом установить Visual C++ Express. Затем, используя мастер проектов, создать подходящее. Если выбрать диалоговое приложение, то будет почти как в Delphi: форма, кнопки и так далее.
Отслеживать
ответ дан 3 мар 2011 в 20:09
34.3k 25 25 золотых знаков 95 95 серебряных знаков 213 213 бронзовых знаков
Ух ты, а я не знал, что она такое умеет))) Думал, такое только на C#)))
3 мар 2011 в 20:14
Добавить ресурс «меню», дать ему идентификатор, потом в диалоговом окне, котором хочешь добавить меню, в свойствах этого окна выбрать нужный ID меню ресурса.
ДОБАВЛЯЕМ МЕНЮ — C++ WINAPI ЧАСТЬ #2
Отслеживать
51.1k 83 83 золотых знака 262 262 серебряных знака 500 500 бронзовых знаков
ответ дан 4 мар 2011 в 9:38
11 1 1 бронзовый знак
Для создания полноценных оконных приложений подразумевается наличие всех привычных элементов управления, таких как: кнопки, бегунки, строки состояния, переключатели и т.д.; требуется наличие полноценной среды разработки, IDE, как уже было сказано выше, — Visual C++.
Размещение таких элементов в рабочем окне проекта, как собственно и создание самого окна, сложностей не вызывает, а вот смысловое наполнение Ваших элементов потребует немного дополнительных знаний и навыков, определенных особенностями самой среды разработки, таких, например, как работа посредством посылки сообщений между элементами и обработка их через карту сообщений, обработка нажатия кнопок мыши, отслеживание местоположения курсора и т.д. В общем, наряду с «базовыми» знаниями стандарта языка, необходимо также изучить специфику и методы работы в самой среде разработки, особенности различных элементов и принципы их взаимосвязи. Свежие версии сред разработки, такие как Visual Studio 2010, к слову, предоставляют достаточно богатый набор вспомогательных сервисов, которые заметно облегчают задачу проектировки и создания современного приложения.
Источник: ru.stackoverflow.com
Редактор меню (C++)
Меню позволяют упорядочить команды логичным и удобным для поиска способом. С помощью редактора меню можно создавать и изменять меню, работая непосредственно с строкой меню, которая очень похожа на строку в готовом приложении.
Во многих случаях при использовании редактора меню можно щелкнуть правой кнопкой мыши, чтобы отобразить всплывающее меню с часто используемыми командами. Доступные команды зависят от объекта, на который наведен указатель мыши.
Создание меню программы | Программирование на Delphi
Инструкции
Редактор меню позволяет:
Создание стандартного меню
Примечание Чтобы создать меню с одним элементом в строке меню, присвойте свойству Popup значение False.
Создание подменю
- Выберите команду меню, для которой нужно создать подменю.
- В поле Новый элемент , которое появится справа, введите имя новой команды меню. Эта новая команда будет первой в подменю.
- Добавьте дополнительные команды меню в меню подменю.
Вставка нового меню между существующими меню
Выберите имя существующего меню и нажмите клавишу INSERT или щелкните правой кнопкой мыши строку меню и выберите команду Вставить новую.
Поле Новый элемент вставляется перед выбранным элементом.
Добавление команд в меню
- Создание меню. Затем выберите имя меню, например Файл. Каждое меню разворачивается и открывает поле нового пункта для команд. Например, можно добавить команды Создать, Открыть и Закрыть в меню Файл .
- В поле нового пункта введите имя для новой команды меню.
Совет Можно определить мнемонический ключ (сочетание клавиш), с помощью которого пользователь может выбрать команду меню. Введите амперсанд ( VERIFY(menu.LoadMenu(IDR_MENU1)); CMenu* pPopup = menu.GetSubMenu(0); ASSERT(pPopup != NULL); pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd());
Примечание Точка CPoint, переданная обработчиком сообщений, находится в экранных координатах.
Обычно при работе в редакторе меню ресурс меню отображается в виде строки меню. Однако у вас могут оказаться ресурсы, добавленные в строку меню приложения, во время работы программы.
- Чтобы просмотреть ресурс меню в виде всплывающего меню, щелкните его правой кнопкой мыши и выберите пункт Просмотреть как всплывающее меню. Этот параметр является только параметров просмотра и не изменяет меню.
Чтобы вернуться к представлению строки меню, снова выберите Вид как всплывающее окно . Это действие удаляет метку проверка и возвращает представление строки меню.
Источник: learn.microsoft.com
Создание меню / tkinter 10
Сложные графические интерфейсы обычно используют строки меню для организации действий и навигации по приложению. Этот подход также применяется для группировки тесно связанных операций. Например, в большинстве текстовых редакторов есть пункт «Файл».
Tkinter поддерживает такие меню, которые отображаются и ощущаются в соответствии с окружением конкретной операционной системы. Это позволяет не симулировать все с помощью фреймов, ведь из-за этого пропадет возможность пользоваться встроенными кроссплатформенными особенностями Tkinter.
Добавим меню в корневое окно со вложенным выпадающим меню. В Windows 10 это отображается следующим образом:
В Tkinter есть класс виджета Menu , который можно использовать для разных меню, включая основную строку. По аналогии с другими классами виджетов экземпляры меню создаются с помощи передачи родительского контейнера в виде первого аргумента и опциональных параметров — в качестве второго:
import tkinter as tk
class App(tk.Tk):
def __init__(self):
super().__init__()
menu = tk.Menu(self)
file_menu = tk.Menu(menu, tearoff=0)
file_menu.add_command(label=»Новый файл»)
file_menu.add_command(label=»Открыть»)
file_menu.add_separator()
file_menu.add_command(label=»Сохранить»)
file_menu.add_command(label=»Сохранить как. «)
menu.add_cascade(label=»Файл», menu=file_menu)
menu.add_command(label=»О программе»)
menu.add_command(label=»Выйти», command=self.destroy)
self.config(menu=menu)
if __name__ == «__main__»:
app = App()
app.mainloop()
Если запустить это скрипт, то вы увидите, что элемент Файл показывает дополнительное меню, а с помощью кнопки Выйти приложение можно закрыть.
Как работает создание верхнего меню
Сначала создаем экземпляр каждого меню, указывая родительский контейнер. Значение 1 у параметра tearoff указывает на то, что меню можно открепить с помощью пунктирной линии на границе. Это поведение не характерно для верхнего меню, но если его нужно отключить, то стоит задать значение 0 для этого параметра:
def __init__(self):
super().__init__()
menu = tk.Menu(self)
file_menu = tk.Menu(menu, tearoff=0)
Элементы меню организованы в том же порядке, в котором они добавляются с помощью методов: add_command , app_separator и add_cascade :
menu.add_cascade(label=»Файл», menu=file_menu)
menu.add_command(label=»О программе»)
menu.add_command(label=»Выйти», command=self.destroy)
Обычно add_command вызывается с параметром command , который является функцией обратного вызова, срабатывающей при нажатии. Аргументы ей не передаются — то же характерно и для виджета Button .
Для демонстрации добавим параметр элементу Выйти , который будет уничтожать экземпляр Tk и закрывать приложение.
Наконец, прикрепляем меню к основному окну с помощью вызова self.config(menu=menu) . Стоит отметить, что у этого окна может быть только одна строка меню.
Использование переменных в меню
Помимо вызова команд и вложенных встроенных меню также можно подключать переменные Tkinter к элементам меню.
Добавим кнопку-флажок и три переключателя в подменю «Опции», разделив их между собой. Внутри будет две переменных Tkinter, которые сохранят выбранные значения так, что их можно будет получить в других методах приложения:
Эти типы элементов добавляются с помощью методов add_checkbutton и add_radiobutton из класса виджета Menu . Как и в случае с обычными переключателями все связаны с одной переменной Tkinter, но имеют разные значения:
import tkinter as tk
class App(tk.Tk):
def __init__(self):
super().__init__()
self.checked = tk.BooleanVar()
self.checked.trace(«w», self.mark_checked)
self.radio = tk.StringVar()
self.radio.set(«1»)
self.radio.trace(«w», self.mark_radio)
menu = tk.Menu(self)
submenu = tk.Menu(menu, tearoff=0)
submenu.add_checkbutton(label=»Checkbutton», onvalue=True,
offvalue=False, variable=self.checked)
submenu.add_separator()
submenu.add_radiobutton(label=»Radio 1″, value=»1″,
variable=self.radio)
submenu.add_radiobutton(label=»Radio 2″, value=»2″,
variable=self.radio)
submenu.add_radiobutton(label=»Radio 3″, value=»3″,
variable=self.radio)
menu.add_cascade(label=»Опции», menu=submenu)
menu.add_command(label=»Выход», command=self.destroy)
self.config(menu=menu)
def mark_checked(self, *args):
print(self.checked.get())
def mark_radio(self, *args):
print(self.radio.get())
if __name__ == «__main__»:
app = App()
app.mainloop()
Будем отслеживать изменения переменной так, чтобы можно было выводить значения в консоли во время работы приложения.
Как работает создание переменных в меню
Для добавления булевой переменной элементу Checkbutton сначала нужно определить BooleanVar и затем создать элемент с помощью вызова add_checkbutton и параметра variable .
Стоит запомнить, что параметры onvalue и offvalue должны совпадать с типами переменных Tkinter как и в случае с виджетами RadioButton и Checkbutton :
self.checked = tk.BooleanVar()
self.checked.trace(«w», self.mark_checked)
# .
submenu.add_checkbutton(label=»Checkbutton», onvalue=True,
offvalue=False, variable=self.checked)
Элементы Radiobutton создаются похожим образом с помощью метода add_radiobutton , и лишь один параметр value может быть задан для переменной Tkinter при нажатии на переключатель. Поскольку изначально в StringVar хранится пустая строка, зададим значение для первого переключателя, чтобы был отмечен как выбранный:
self.radio = tk.StringVar()
self.radio.set(«1»)
self.radio.trace(«w», self.mark_radio)
# .
submenu.add_radiobutton(label=»Radio 1″, value=»1″,
variable=self.radio)
submenu.add_radiobutton(label=»Radio 2″, value=»2″,
variable=self.radio)
submenu.add_radiobutton(label=»Radio 3″, value=»3″,
variable=self.radio)
Обе переменные отслеживают изменения с помощью методов mark_checked и mark_radio , которые просто выводят значения в консоль.
Отображение контекстных меню
Меню Tkinter не обязательно должны быть расположены в строке меню. Их можно размещать в любом месте. Такие меню называются контекстными, и обычно они отображаются при нажатии правой кнопкой по элементу.
Контекстные меню широко распространены в приложениях с графическим интерфейсом. Например, файловые менеджеры позволяют показывать все доступные операции для выбранного файла так, что для пользователей это будет ощущаться интуитивно.
Создадим контекстное меню для виджета Text, которое будет отображать некоторые распространенные действия в редакторах текста: Вырезать, Копировать, Вставить и Удалить:
Вместо настройки экземпляра меню в качестве контейнера можно явно задать положение с помощью метода post .
Все команды в элементах меню вызывают метод, использующий текст для получения текущего выделения или позиции для вставки:
import tkinter as tk
class App(tk.Tk):
def __init__(self):
super().__init__()
self.menu = tk.Menu(self, tearoff=0)
self.menu.add_command(label=»Вырезать», command=self.cut_text)
self.menu.add_command(label=»Копировать», command=self.copy_text)
self.menu.add_command(label=»Вставить», command=self.paste_text)
self.menu.add_command(label=»Удалить», command=self.delete_text)
self.text = tk.Text(self, height=10, width=50)
self.text.bind(«», self.show_popup)
self.text.pack()
def show_popup(self, event):
self.menu.post(event.x_root, event.y_root)
def cut_text(self):
self.copy_text()
self.delete_text()
def copy_text(self):
selection = self.text.tag_ranges(tk.SEL)
if selection:
self.clipboard_clear()
self.clipboard_append(self.text.get(*selection))
def paste_text(self):
self.text.insert(tk.INSERT, self.clipboard_get())
def delete_text(self):
selection = self.text.tag_ranges(tk.SEL)
if selection:
self.text.delete(*selection)
if __name__ == «__main__»:
app = App()
app.mainloop()
Как работает контекстное меню
Связываем событие нажатия правой кнопки мыши с обработчиком show_popup для экземпляра текста. Оно будет выводить меню, чей левый верхний угол находится над положением, где был произведен клик. Каждый раз при срабатывании события заново отображается одно и то же меню:
Источник: pythonru.com