C++ — Как сделать меню в C++

Содержание

Создание оконного приложения в Visual Studio

Для создания Windows-приложений на C++ можно использовать среду разработки Microsoft Visual Studio 2010 Express с пакетом обновления SP1 .

Для создания нового диалогового или оконного (каркасного) приложения запускаем Microsoft Visual Studio 2010 Express и переходим в меню Файл->Создать->Проект

В появившемся окне выбираем Проект Win32 и задаем имя проекта и нажимаем кнопку OK.

В появившемся окне нажимаем кнопку Далее.

В следующем окне отмечаем галочку Дополнительные параметры: Пустой проект и нажимаем кнопку Далее.

В левой части появившегося окна отображается Обозреватель решений. Для добавления нового файла программы в проект выбираем по правой кнопке мыши на папке Файлы исходного кода меню Добавить->Создать элемент.

В появившемся окне выбираем Файл C++ (.cpp), задаем имя файла и нажимаем кнопку Добавить.

В появившемся окне набираем текст программы. Для примера можно взять текст программы, выводящей на экран сообщение «Привет всем!»:

Для компиляции программы выбираем меню Отладка->Построить решение.

В случае успешного построения в нижней части окна отображается Построение: успешно 1.

Для запуска приложения выбираем меню Отладка->Начать отладку.

Редактор меню (C++) Menu Editor (C++)

Меню позволяют упорядочить команды логичным и удобным для поиска способом. Menus allow you to arrange commands in a logical and easy-to-find fashion. С помощью редактора менюможно создавать и изменять меню, работая непосредственно с строкой меню, которая похожа на ту, что закончена в готовом приложении. With the Menu Editor, you can create and edit menus by working directly with a menu bar that closely resembles the one in your finished application.

При использовании редактора менюво многих случаях можно щелкнуть правой кнопкой мыши для отображения всплывающего меню часто используемых команд. While using the Menu Editor, in many instances, you can right-click to display a pop-up menu of frequently used commands. Доступные команды зависят от объекта, на который наведен указатель мыши. The commands available depend on what the pointer is pointing to.

Практические руководства How To

Редактор меню позволяет: The Menu Editor enables you:

Создание стандартного меню To create a standard menu

Последовательно выберите пункты видменю > другиепредставление ресурсов Windows > и щелкните правой кнопкой мыши заголовок меню . Go to menu View > Other Windows > Resource View and right-click on the Menu heading. Выберите Добавить ресурс, а затем — меню. Choose Add Resource, then Menu.

В строке меню выберите поле новый элемент (прямоугольник, содержащий тип). Select the New Item box (the rectangle that contains Type Here) on the menu bar.

Поле » создать элемент » New Item box

Введите имя для нового меню, например файл. Type a name for your new menu, for example, File.

Введенный текст отображается как в редакторе меню , так и в поле заголовка в окне Свойства. The text you type appears in both the Menu Editor and in the Caption box in the Properties Window. Вы можете изменять свойства нового пункта меню в любом из этих мест. You can edit the properties for your new menu in either location.

Как только вы присвоите название новому меню в строке меню, поле нового элемента сдвинется вправо (чтобы вы могли добавить еще одно меню), а другое поле нового элемента откроется под первым меню, чтобы вы могли добавить в него команды. Once you have given your new menu a name on the menu bar, the new-item box shifts to the right (to allow you to add another menu), and another new-item box opens below your first menu so you can add menu commands to it.

Поле » новый элемент » с фокусом, перемещенным после ввода имени меню New Item box with focus shifted after you type menu name

Чтобы создать меню с одним элементом в строке меню, задайте для свойства Popup значение false. To create a single-item menu on the menu bar, set the Popup property to False.

Создание подменю To create a submenu

Выберите команду меню, для которой нужно создать подменю. Select the menu command for which you want to create a submenu.

В поле Новый элемент , которое появится справа, введите имя новой команды меню. In the New Item box that appears to the right, type the name of the new menu command. Эта новая команда будет первой в подменю. This new command will appear first on the submenu menu.

Добавьте остальные команды в подменю. Add additional menu commands to the submenu menu.

Вставка нового меню между существующими меню To insert a new menu between existing menus

Выберите существующее имя меню, нажмите клавишу INSERT или щелкните правой кнопкой мыши строку меню и выберите команду Вставить новый. Select an existing menu name and press the Insert key, or right-click on the menu bar and choose Insert New.

Поле нового элемента будет вставлено перед выбранным элементом. The New Item box is inserted before the selected item.

Добавление команд в меню To add commands to a menu

Создайте меню. Create a menu. Затем выберите имя меню, например файл. Then select a menu name, for example, File.

Каждое меню разворачивается и открывает поле нового пункта для команд. Each menu will expand and expose a new item box for commands. Например, можно добавить команды » создать«, » Открыть» и » Закрыть » в меню » файл «. For example, you can add the commands New, Open, and Close to a File menu.

В поле нового пункта введите имя для новой команды меню. In the new item box, type a name for the new menu command.

Введенный текст отображается как в редакторе меню , так и в поле заголовка в окне Свойства. The text you type appears in both the Menu Editor and in the Caption box in the Properties Window. Вы можете изменять свойства нового пункта меню в любом из этих мест. You can edit the properties for your new menu in either location.

Можно определить мнемонический ключ (сочетание клавиш), с помощью которого пользователь может выбрать команду меню. You can define a mnemonic key (hot key) that allows the user to select the menu command. Введите амперсанд ( & ) перед буквой, чтобы указать ее как назначенную клавишу. Type an ampersand ( & ) in front of a letter to specify it as the mnemonic. Пользователь сможет выбрать команду меню, введя эту букву. The user can select the menu command by typing that letter.

В окне Свойства выберите Свойства команды меню, которые применяются. In the Properties window, select the menu command properties that apply. Дополнительные сведения см. в разделе Свойства команды меню. For details, see Menu Command Properties.

В поле запроса в окне свойства введите строку запроса, которая будет отображаться в строке состояния приложения. In the Prompt box in the Properties window, type the prompt string you want to appear in your application’s status bar.

На этом шаге создается запись в таблице строк с тем же идентификатором ресурса, что и у созданной команды меню. This step creates an entry in the string table with the same resource identifier as the menu command you created.

Запросы могут применяться только к пунктам меню со свойством Popup , равным true. Prompts can only apply to menu items with a Popup property of True. Например, пункты меню верхнего уровня могут иметь подсказки, если у них имеются вложенные пункты меню. For example, top-level menu items can have prompts if they have sub-menu items. Предназначение запроса — указать, что произойдет, если пользователь выберет пункт меню. The purpose of a Prompt is to indicate what will happen if a user selects the menu item.

Нажмите клавишу Ввод , чтобы завершить команду меню. Press Enter to complete the menu command.

Поле нового элемента выделено, так что вы можете создать дополнительные команды меню. The new item box is selected so you can create additional menu commands.

Выбор нескольких команд меню для выполнения таких операций, как удаление или изменение свойств To select multiple menu commands to run bulk operations such as deleting or changing properties

Удерживая нажатой клавишу CTRL , выберите нужные команды меню или подменю. While holding down the Ctrl key, select the menus or submenu commands you want.

Перемещение и копирование меню и команд меню To move and copy menus and menu commands

Используйте метод перетаскивания: Use the drag-and-drop method:

Перетащите или скопируйте элемент, который требуется переместить. Drag or copy the item you want to move to:

Новое расположение в текущем меню. A new location on the current menu.

Другое меню. A different menu. Можно перейти к другим меню, перетащив на них указатель мыши. You can navigate to other menus by dragging the mouse pointer over them.

Удалите команды меню, когда направляющая покажет нужное положение. Drop the menu command when the insertion guide shows the position you want.

Используйте команды контекстного меню: Use shortcut menu commands:

Щелкните правой кнопкой мыши одно или несколько меню или команд меню, а затем выберите команду Вырезать (для перемещения) или Копировать. Right-click one or more menus or menu commands, then choose Cut (to move) or Copy.

Если вы перемещаете элементы в другой ресурс меню или файл сценария ресурсов, откройте его в другом окне. If you’re moving the items to another menu resource or resource script file, open it in another window.

Выберите положение меню или команды меню, которую нужно переместить или скопировать. Select the position of the menu or menu command you want to move or copy to.

Выберите в контекстном меню команду Вставить. From the shortcut menu, choose Paste. Перемещенный или скопированный пункт помещается перед выбранным пунктом. The moved or copied item is placed before the item you select.

Вы также можете перетаскивать, копировать и вставлять в другие меню в других окнах меню. You can also drag, copy, and paste to other menus in other menu windows.

Удаление меню или команды меню To delete a menu or menu command

Щелкните правой кнопкой мыши имя меню или команду и выберите команду Удалить. Right-click the menu name or command and choose Delete.

Аналогично, контекстное меню можно использовать для выполнения других действий, таких как: копирование, вырезание, вставка, создание и вставка, вставка разделителя, изменение идентификатора, просмотр в виде всплывающих элементов, проверка назначенных клавиш и т. д. Similarly, you can use the shortcut menu to perform other actions such as Copy, Cut, Paste, Insert New, Insert Separator, Edit IDs, View as Pop-up, Check Mnemonics, etc.

Всплывающие меню Pop-up Menus

Всплывающие меню отображают часто используемые команды. Pop-up menus display frequently used commands. Они могут быть контекстно-зависимыми, т. е. зависеть от положения указателя. They can be context sensitive to the location of the pointer. Использование всплывающего меню в приложении требует создания самого меню и привязки его к коду приложения. Using pop-up menus in your application requires building the menu itself and then connecting it to application code.

После создания ресурса меню код приложения должен загрузить ресурс меню и использовать метод TrackPopupMenu для отображения меню. Once you’ve created the menu resource, your application code needs to load the menu resource and use TrackPopupMenu to cause the menu to appear. Когда пользователь отправит всплывающее меню, выбрав за его пределами, или выберет команду, она возвратит. Once the user has dismissed the pop-up menu by selecting outside it, or has selected a command, that function will return. Если пользователь выберет команду, будет отправлено сообщение этой команды в то окно, дескриптор которого был передан. If the user chooses a command, that command message will be sent to the window whose handle was passed.

Для программ библиотеки Microsoft Foundation Class (MFC) и программ ATL используйте мастера кода для привязки команд меню к коду. For Microsoft Foundation Class (MFC) library programs and ATL programs, use Code Wizards to hook menu commands to code. Дополнительные сведения см. в разделе Добавление события и сопоставление сообщений в функции. For more information, see Adding an Event and Mapping Messages to Functions.

Чтобы создать всплывающее меню, создайте меню с пустым заголовком и не запишите заголовок. To create a pop-up menu, create a menu with an empty title and don’t provide a Caption. Затем добавьте команду меню в меню создать, перейдите к первой команде меню, расположенной под пустым названием, с типом временного заголовка и введите заголовок и другие сведения. Then, add a menu command to the new menu, move to the first menu command below the blank menu title with the temporary caption Type Here and type a Caption and any other information.

Цукерберг рекомендует:  Интерактивная папка с файлами

Повторите эту процедуру для всех остальных команд меню во всплывающем меню и не забудьте сохранить ресурс меню. Repeat this process for any other menu commands in the pop-up menu and be sure to save the menu resource.

Например, чтобы подключить к приложению всплывающее меню, добавьте обработчик сообщений для WM_CONTEXTMENU, а затем добавьте следующий код в обработчик сообщений: To connect a pop-up menu to your application, for example, add a message handler for WM_CONTEXTMENU, then add the following code to the message handler:

CPoint , переданный обработчиком сообщений, находится в экранных координатах. The CPoint passed by the message handler is in screen coordinates.

Обычно при работе в редакторе менюресурс меню отображается в виде строки меню. Normally, when you’re working in the Menu Editor, a menu resource is displayed as a menu bar. Однако у вас могут оказаться ресурсы, добавленные в строку меню приложения, во время работы программы. However, you might have menu resources that are added to the application’s menu bar while the program is running.

Чтобы просмотреть ресурс меню в виде всплывающего меню, щелкните меню правой кнопкой мыши и выберите пункт Просмотреть как всплывающее окно. To view a menu resource as a pop-up menu, right-click the menu and choose View as Popup.

Этот параметр является только параметром просмотра и не изменяет меню. This option is only a viewing preference and won’t modify your menu.

Чтобы вернуться к представлению в виде строки меню, последовательно выберите Просмотреть как всплывающее окно . To change back to the menu-bar view, select View as Popup again. Это действие удаляет галочку и возвращает представление в виде строки меню. This action removes the check mark and returns your menu-bar view.

Меню на Си (в консоли)

Может у кого нибудь есть пример меню, такого вида :

Задание 1
Задание 2
Задание 2

При выборе задание 1 , на месте этого меню появилось следующее меню:

Ввести из файла
Записать вручную.

short select()<
char menu;
printf(«%s\n»,»1.menu_1″);
printf(«%s\n»,»2.menu_2″);
printf(«%s\n»,»3.menu_3″);
menu=getch();
if (menu ‘3’) <
system(«cls»);
printf(«Select from 1 to 3\n»);
menu=select();
>

void main ()<
bool rabotaem; // переменная отвечающая за работу всей программы
rabotaem=true;
int nmen; // номер меню
//———-
while (rabotaem)<
cout > nmen;
cout Похожие вопросы

Используя собственные оболочки c++ для ncurses, Как я могу создать систему меню/подменю?

Я провел последний год, изучая C++ (используя C++ Primer в качестве рекомендуемого материала на qaru.site/questions/75/. ). Я хотел научиться использовать ncurses, чтобы сделать свою первую летную сольную программу. Хотя NCurses основан на C, более или менее известно, что существуют нативные оболочки ncurses C++. Однако документации для них практически не существует; Есть файл demo.cc, который я использовал в качестве основы, и несколько мест в Интернете. Во всяком случае, я сделал это мой итоговый экзамен, так сказать, чтобы понять и использовать эти обертки.

Проблема, с которой я сталкиваюсь, относится к типу «лучших практик программирования»: из-за отсутствия документированных примеров я не уверен в том, как лучше создать подменю из системы демонстрационного начального меню.

Лучшая идея, которую я могу придумать, — это использовать примерный способ присоединения ncurses++ NCursesUserItem к пункту меню. Будет ли указатель пользователя указателем на предыдущий класс меню? В NCurses вы можете публиковать и отменять публикацию меню, поэтому я также предполагаю, что я хочу «отменить публикацию» предыдущего меню, когда новое «отправляет», поэтому я хотел, чтобы указатель на предыдущее меню отображался в новом.

Типичный безопасный способ присоединения пользовательских данных (для set_item_userptr) к пункту меню:

Главное меню объекта. Я создал здесь объект Submenu и передал в качестве аргумента this (указатель главного меню).

Класс Choice0Menu, который должен содержать кнопку возврата для возврата в главное меню (I [2])

У меня просто есть много сомнений относительно этого способа, например, возможно, мне не нужно передавать весь указатель «this» в главное меню при создании подменю, только элементы post и unpost. И классы MainMenu и Choice0Menu очень похожи по функциям, так что, может быть, даже превратить это в один класс шаблона? Поскольку Choice0Menu принимает MainMenu в качестве аргумента, может быть, это T *, чтобы выбрать любой тип меню.

Мой метод не кажется «чистым» способом программирования проблемы.

Спасибо за помощь. Я изучаю эту проблему уже почти 2 недели.

C++ — Как сделать меню в C++ ?

Самый простой и удобный способ создания меню приложения основан на использовании специального ресурса — шаблона меню. Если вы применяете для создания приложения средства MFC AppWizard, то однооконное приложение по умолчанию будет иметь один ресурс меню, а многооконное два.

Для создания и изменения меню приложения следует использовать редактор ресурсов Microsoft Visual C++. С помощью него вы разработаете меню буквально за несколько минут.

Редактор ресурсов позволяет для каждой строки меню определить ее название, идентификатор, текст подсказки, а также некоторые дополнительные характеристики. Но самым ценным является возможность, добавив к меню новые строки, сразу запустить MFC ClassWizard и определить методы приложения, которые будут использоваться для обработки командных сообщений от этих строк меню.

Чтобы добавить новую строку к меню, достаточно выполнить двойной щелчок левой кнопкой мыши по одному из пустых прямоугольников из точек, которые располагаются в конце главного меню (вы создадите еще одно меню верхнего уровня) и в низу каждого из меню (создается новая строка меню). При этом на экране появится диалоговая панель Menu Item Properties, которую вы должны заполнить (рис. 3.1).

Рис. 3.1. Редактор меню и диалоговая панель Menu Item Properties

Текст, который будет отображаться в строке меню, вы должны ввести в поле Caption. Затем в списке с полем редактирования ID надо выбрать идентификатор для этой строки меню. Если вы не заполните поле ID, редактор ресурсов самостоятельно создаст новый идентификатор на основе имени меню и строки.

В поле Prompt вы можете ввести текстовую строку, которая будет отображаться при выборе данного элемента меню в панели состояния приложения. Редактор ресурсов Microsoft Visual C++ создаст для введенного текста новый строковый ресурс и запишет его в файл ресурсов приложения, присвоив ему тот же идентификатор, что и меню. Так как строки меню и описывающий их текст, имеют одинаковые идентификаторы, то MFC сможет использовать их вместе. При выборе строки меню, MFC просто загружает строковый ресурс с идентичным идентификатором и отображает его в панели состояния.

Остальные переключатели диалоговой панели Menu Item Properties задают различные характеристики строк меню, отвечающие в первую очередь за их внешний вид. Изучите их самостоятельно, используя документацию Microsoft Visual C++.

Также легко можно просмотреть и изменить свойства уже существующих строк меню. Для этого надо выполнить по ним двойной щелчок левой кнопкой мыши. На экране появится уже описанная нами выше диалоговая панель Menu Item Properties, которая уже заполнена текущими параметрами строки меню.

Меню без класса CMenu

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

В приложениях, созданных с помощью MFC AppWizard меню создается автоматически вместе с панелью управления и панелью состояния. Для этого достаточно указать при создании шаблона документа XE «шаблон документа» общий идентификатор этих ресурсов:

В случае многооконного приложения дополнительно указываются ресурсы, используемые когда все окна просмотра документов закрыты. Все эти ресурсы имеют один и тот же идентификатор. В примере, представленном ниже, это идентификатор IDR_MAINFRAME:

В приложениях MFC AppWizard, имеющих однооконный или многооконный интерфейс, меню создается и изменяется самой библиотекой MFC. Несмотря на это, вы также можете управлять меню. Самый простой способ заключается в обработке команд обновления от меню. Проблеме использования этих команд мы посвятили раздел “Класс CCmdUI”.

Даже когда приложение создано без использования средств MFC AppWizard, процедура создания меню остается очень простой и также может не задействовать объекты класса CMenu напрямую.

В таких приложениях, как правило, создается главное окно на основе класса CFrameWnd. Для этого сначала создается соответствующий объект класса CFrameWnd, а затем вызывается либо метод Create, либо метод LoadFrame, который в свою очередь уже создает само окно вместе с меню.

Метод Create

Метод Create создает и инициализирует окно, связанное с объектом CFrameWnd. В случае успешного завершения метод Create возвращает ненулевое значение, а в противном случае — ноль:

Обязательно надо указать только два первых параметра метода Create. Первый параметр lpszClassName служит для задания класса окна. В качестве него можно также указать значение NULL, тогда по умолчанию будет использован класс, определенный для окон CFrameWnd. Второй параметр lpszWindowName указывает имя окна — оно будет отображаться в заголовке окна.

Остальные параметры метода необязательные. Если их не указать, будут использованы значения, принятые по умолчанию. Нас, однако, сейчас интересует только параметр lpszMenuName. Через него вы можете указать имя ресурса меню, которое будет создано для данного окна. По умолчанию редактор ресурсов Microsoft Visual C++ присваивает созданным в нем ресурсам, в том числе меню, числовые идентификаторы. Чтобы получить из такого идентификатора значение, совместимое по типу с параметром lpszMenuName, следует использовать макрокоманду MAKEINTRESOURCE.

Следующий пример показывает, как можно создать окно с меню:

Класс CMultiMenuWindow, конструктор которого представлен выше, наследован от базового класса CFrameWnd. Конструктор CMultiMenuWindow создает окно с заголовком Multi Menu Sample. Это окно имеет меню IDR_MENU. Меню с идентификатором IDR_MENU должно быть определено в файле ресурсов приложения.

Метод LoadFrame

Виртуальный метод LoadFrame позволяет динамически создавать окно, пользуясь информацией из файла ресурсов. В случае успешного завершения метод LoadFrame возвращает ненулевое значение, а в противном случае — ноль:

Параметры метода LoadFrame практически идентичны параметрам метода Create, описанного ранее. Исключение составляет первый параметр — nIDResource. Он представляет идентификатор, общий для нескольких ресурсов, используемых при создании окна. К таким ресурсам относятся меню (будет использоваться как меню окна), строковый ресурс (заголовок окна), пиктограмма (отображается в случае минимизации окна) и таблица клавиш акселерации (используется для ускоренного выбора строк меню).

Класс CMenu

Вы можете создать меню и без использования методов Create или LoadFrame. Для этого вы должны будете создать объект класса CMenu XE «CMenu» и вызвать для него несколько методов.

Конструктор класса CMenu

Объект класса CMenu не является меню, он только представляет существующее меню. Вы можете создать объект класса CMenu как локальный, а после использования удалить. На меню это не повлияет:

Метод LoadMenu

После объявления объекта класса CMenu вы можете загрузить меню из ресурсов приложения, воспользовавшись для этой цели методом LoadMenu. В случае успешного завершения метод LoadMenu возвратит ненулевое значение, и нуль в противном случае:

Метод LoadMenu загрузит меню, заданное именем lpszResourceName или идентификатором nIDResource, и свяжет его с соответствующим объектом класса CMenu. Теперь вы можете использовать для управления загруженным меню другие методы класса CMenu.

После того как меню загружено, его можно “подключить” к окну. Для этого следует воспользоваться методом SetMenu входящим в класс CWnd.

Метод SetMenu класса CWnd

В качестве параметра pMenu передайте методу SetMenu указатель на объект класса CMenu, представляющий меню. Если вы желаете просто удалить текущее меню, используемое окном, передайте методу SetMenu в качестве параметра значение NULL:

В случае успешного завершения операции метод SetMenu вернет ненулевое значение. В противном случае SetMenu вернет ноль.

После того, как вы установили меню, вызвав метод SetMenu, и до того, как соответствующий объект CMenu будет удален, надо вызвать метод Detach класса CMenu. Этот метод разорвет связь между меню и соответствующим объектом класса CMenu, после чего последний может быть удален:

Метод Detach возвращает в случае успешного завершения идентификатор меню, а в случае ошибки — значение NULL.

Сразу отметим, что если до установки меню окно уже имело меню, надо удалить его, воспользовавшись методом DestroyMenu класса CMenu. Если с меню, подлежащим удалению, не связан объект класса CMenu, вы можете обратиться к методу Attach:

Для этого создайте объект класса CMenu, а затем вызовите для него метод Attach, указав в качестве параметра hMenu идентификатор меню. Метод Attach возвращает в случае успешного завершения ненулевое значение, а в случае ошибки — ноль.

Чтобы определить идентификатор меню известного окна, можно воспользоваться методом GetMenu, определенным в классе CWnd. Этот метод возвращает указатель на объект типа CMenu:

Вы можете получить из него идентификатор меню, если обратитесь к элементу данных m_hMenu, входящему в класс CMenu.

Мы продемонстрируем различные методы создания и управления меню в приложении MultiMenu, а сейчас сделаем несколько замечаний относительно остальных методов класса CMenu.

Класс CMenu, наследованный от базового класса CObject, содержит все необходимые методы для создания и управления меню. Используя эти методы, вы можете добавлять к меню новые строки, удалять и изменять их. Специальные методы класса CMenu позволяют выделять отдельные строки меню и даже создавать элементы меню, содержащие не только текст но и изображение.

Класс CCmdUI

В MFC реализован специальный механизм для обновления таких объектов интерфейса пользователя как меню, панели управления и панели состояния. Этот механизм предусматривает передачу приложению команд обновления пользовательского интерфейса (update command user interface). Для обработки этих команд предназначена макрокоманда ON_UPDATE_COMMAND_UI, размещаемая в таблице сообщений класса.

Для каждой строки меню, для каждой кнопки панели управления и для каждого индикатора панели состояния передается отдельное сообщение.

Когда передаются команды обновления интерфейса пользователя? Многое зависит от самого обновляемого объекта.

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

Для кнопок панели управления и индикаторов панели состояния команды обновления передаются в период “бездействия” приложения, когда очередь сообщений приложения пуста.

В момент, когда пользователь открывает меню, приложению передаются команды обновления. В результате для всех строк меню, для которых в таблице сообщений приложения присутствуют макрокоманды ON_UPDATE_COMMAND_UI, вызываются соответствующие методы-обработчики. Они могут изменить состояние меню — заблокировать отдельные строки меню, выделить их символами · или Ö.

Панели управления и панели состояния

Если очередь сообщений приложения пуста, вызывается метод OnIdle главного класса приложения. В своем приложении вы можете переопределить метод OnIdle и выполнять с его помощью какую-либо фоновую работу.

Цукерберг рекомендует:  Opencart - CMS для крупного интернет-магазина

Метод OnIdle определен в классе CWinApp и по умолчанию выполняет обновление пользовательского интерфейса — передает команды обновления для тех кнопок панелей управления и индикаторов панелей состояния, которые имеют в таблице сообщений приложения макрокоманду ON_UPDATE_COMMAND_UI. Макрокоманда ON_UPDATE_COMMAND_UI вызывает методы-обработчики, которые могут изменить состояние кнопок и индикаторов панелей управления и панелей состояния.

Как правило, ряд строк меню и кнопок панелей управления имеют одинаковые идентификаторы. В этом случае для обработки команд обновления строк меню и кнопок панели управления вызываются одни и те же методы.

Органы диалоговых панелей управления

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

Макрокоманда ON_UPDATE_COMMAND_UI

Макрокоманда ON_UPDATE_COMMAND_UI предназначена для использования в таблицах сообщений приложения и имеет следующий формат:

Параметр id определяет идентификатор строки меню, кнопки панели управления или индикатора панели состояния, для которых надо обработать команду обновления. Параметр memberFxn задает метод, выполняющий обновление.

Если один и тот же метод вызывается для обработки различных команд обновления, можно использовать другую макрокоманду — ON_UPDATE_COMMAND_UI_RANGE. Она вызывает метод memberFxn для обработки всех команд обновления, идентификаторы которых находятся в промежутке значений от id1 до id2:

Метод — обработчик команд обновления, который вызывается макрокомандами ON_UPDATE_COMMAND_UI и ON_UPDATE_COMMAND_UI_RANGE имеет следующий формат:

Имя метода — обработчика обычно формируется из префикса OnUpdate и названия соответствующего объекта интерфейса пользователя — строки меню, кнопки панели управления или индикатора панели состояния.

В качестве параметра pCmdUI методу передается указатель на объект класса CCmdUI. Этот объект представляет элемент интерфейса пользователя (строку меню, кнопку панели управления…), для которого надо обработать команду обновления. Вызывая методы класса CCmdUI, вы можете легко изменять состояние соответствующего объекта интерфейса пользователя.

Более подробно самые важные методы класса CCmdUI мы рассмотрим в следующем разделе.

MFC ClassWizard и команды обновления

Если приложение подготовлено с использованием MFC AppWizard, то наилучшим способом создания обработчиков команд обновления является использование средств ClassWizard. Процедура создания обработчиков команд обновления от строк меню и кнопок панелей управления практически не отличается от процедуры создания обычных обработчиков командных сообщений.

Запустите ClassWizard. На экране появится диалоговая панель MFC ClassWizard. Выберите из нее страницу Message Maps (рис. 3.2). Теперь из списка Object IDs выберите идентификатор интересующей вас строки меню или кнопки панели управления. В списке Messages появятся две строки — COMMAND и ON_UPDATE_COMMAND_UI.

Строка COMMAND позволяет создать обработчик командных сообщений, а строка ON_UPDATE_COMMAND_UI — обработчик команд обновления. О том как создавать с помощью MFC ClassWizard методы для обработки командных сообщений, мы рассказывали в 24 томе серии “Библиотека системного программиста”, посвященном библиотеке классов MFC.

Чтобы создать обработчик для команды обновления, выберите из списка Messages строку ON_UPDATE_COMMAND_UI, а из списка Class name имя класса к которому будет добавлен новый метод. Нажмите кнопку Add Function. MFC ClassWizard предложит имя для нового метода. Вы можете согласиться с предложением ClassWizard или изменить имя метода по своему усмотрению. В частности, для нескольких разных строк меню или кнопок панели управления вы можете указать один и тот же метод обработчик.

Рис. 3.2. MFC ClassWizard

К сожалению, MFC ClassWizard не позволяет назначить один обработчик команд обновления нескольким объектам пользовательского интерфейса с помощью макрокоманды ON_UPDATE_COMMAND_UI_RANGE. Вместо одной макрокоманды ON_UPDATE_COMMAND_UI_RANGE MFC ClassWizard разместит в таблице сообщений необходимое количество макрокоманд ON_UPDATE_COMMAND_UI.

Еще одно неприятное ограничение MFC ClassWizard заключается в том, что он не дает возможности создать обработчики для команд обновления от индикаторов панели состояния. Такие обработчики вы должны будете добавлять к классам приложения вручную.

Методы класса CCmdUI

Важную роль в работе таких объектов интерфейса пользователя, как меню, панели управления и панели состояния, играет класс CCmdUI. Методы этого класса позволяют заблокировать отдельные элементы меню, панелей управления и панелей состояния, отметить их символами Ö или ·.

Класс CCmdUI один из немногих классов библиотеки MFC, который не имеет других базовых классов. Поэтому для объектов данного класса доступно относительно мало методов. Вы можете использовать только методы, определенные в самом классе CCmdUI.

Предложения с созданием меню для программы для пациентов в C++

Итак, у меня в основном большая часть программирования почти завершена. Я хотел добавить меню, которое отображает вывод. Например, создается список записей. После того, как все введено, я хотел бы, чтобы он отображал только пациентов, которые курят или имеют высокое кровяное давление или диету с высоким содержанием жиров при выборе номера из меню. Теперь я застреваю, пытаясь понять это, но, похоже, не может обернуться вокруг него. Любые предложения о том, как я могу заставить его работать? Сейчас он установлен только для отображения всех записей за один раз.

// Описание программы: Программа интерфейса, которая отображает записи пациентов.

Создан 08 дек. 14 2014-12-08 18:46:32 District-9

1 ответ

Вы можете держать отдельный связанный список для каждого типа — курильщик, НВР, HFD и изменить

и список печати дали ему

кстати, пахнет домашней работой :)

Создан 08 дек. 14 2014-12-08 19:17:15 Edgars

Спасибо за быстрый ответ onse. Это именно то, что мне нужно. Я учу себя C++, и это не так просто, как я думал, что это будет lol. Но я вишу дальше. – District-9 08 дек. 14 2014-12-08 20:46:50

Как создать динамическое меню в Visual C++ Применение Windows Form?

Я строю приложение форм окон C++ в Visual Studio 2015. У меня есть меню параметров, у которого есть Экономить и Груз sub пункт. Я хотел бы добавить sub пункты к Грузу на запуске после чтения параметров настройки от файла так, что, если пользователь нажимает на пункт, фактические параметры настройки загружаются.

Параметры настройки успешно прочитаны во множество касательно класса определенный для этих параметров настройки. Но по некоторым причинам пункты меню не создаются и добавляются. Путем я пробую, то, что в Груз событие Форма я бегу readSettings() функция, которая читает от файла и заполняет параметры настройки ко множеству, и после заполнения его во множестве, создает ToolStripMenuItem , и определяет имя, размер, и текст для него, затем добавляет его к loadToolStripMenuItem , который является моим меню груза.

Я прокомментировал линию, когда я пытаюсь добавить обработчик событий, потому что я понятия не имею, как заставить его работать. Второй аргумент EventHandler должен быть EventArgs, соответствующим документации. Но насколько я видел в коде, что Visual Studio произвела, это — название функции-обработчика фактического события, не аргументы. В моем случае необходимо передать аргумент функции loadSettings. имя переменная должна быть этим аргументом.

( loadSettings (имя String^) функция также проверена и работает правильно). И я также не могу создать функцию обработчика событий вручную, потому что количество сохраненных настроек не ограничивается.

Простое введение в C++. Часть 1. Классы

В этой статье мы рассмотрим простое и понятное введение в С++. Хотя C++ кажется сложным, но это происходит потому, что при его описании используют много туманных абстракций и лишних терминов.

Мы же рассмотрим C++ без всякой философии, с точки зрения программиста-практика.

1. Сравнение С и С++

Начнем с хорошей новости. Язык C++ — это клон языка C, в который были добавлены средства работы с классами. Поэтому, если вы знаете язык C, то вы уже на 90% знаете C++.
Первоначально C++ так и назывался «Си с классами», но потом решили дать более «си-шное» название, то есть добавили единичку к C. Поэтому нам нужно разобраться только с программированием в классах. Что мы сейчас и сделаем

2. Создание нового проекта

Запустите CodeBlocks, создайте новый проект и выберите шаблон «Console application».

Выберите C++ и нажмите Next.

Укажите папку и имя файла и нажмите Next.

Нажмите Finish. Вы получили минимальную программу на C++.

Нажмите F9 для компиляции и запуска программы.

3. Пример на С

Так как C++ — это клон C, то мы можем писать код, как обычно мы это делаем в языке C. Сделаем это, чтобы потом сравнить отличия. Напишем следующую программу:

В этой программе все просто. Есть две переменных x и y, и есть функция Sum, которая складывает два числа. Обозначение «cout 4. Главный секрет C++

А теперь мы напишем ту же самую программу, но уже с классами. И для этого нам нужно знать главный секрет C++.

Как видите, секрет достаточно прост. Запишем нашу программу но уже с помощью класса:

Итак, что мы сделали?

Мы создали класс Summa с помощью ключевого слова class. Но класс — это просто шаблон. Для использования класса нужно получить экземпляр класса. Это мы сделали в строке «Summa s;». После того, как эта строка выполнится, мы получим экземпляр класса, к которому же можно обращаться. При этом переменные класса называются свойства, а функции класса называются методы.

Обратите внимание, что функция Sum не требует указания параметров, потому она берет эти параметры из свойств класса.

Обращение к свойствам и методам производится с помощью точки. Например, «s.x» — означает, что мы обращаемся к свойству экземпляра s класса Summa.

Ключевое слово public означает, что свойства и методы класса доступны вне класса.

5. Наследование классов

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

Опять же сравним с чистым Си.

Допустим, что нам нужно не только суммировать числа, но и удвоить результат. В языке Си один вариантов это сделать — использовать вложенную функцию:

В этом примере функция Sum2 использует вызов функции Sum. Важный момент здесь в том, что те параметры, которые были переданы на вход функции Sum2 просто передаются на вход функции Sum. Такая сквозная передача параметров — это обычная практика C.

Но мы видели, что в классе мы параметры не использовали. Как же их передать? Для этого в C++ используется наследование.

В этом примере в строке «class Summa2 : public Summa» мы указываем, что класс Summa2 наследуется от класса Summa. Это позволяет обратиться к свойствам и методам наследуемого класса.

Там где в С используются вложенные функции, там в C++ используются вложенные классы.

На самом деле, из-за того, что класс объединяет данные и код, возникает масса проблем, поэтому с классами связаны еще многие ключевые слова. Но суть программирования в классах они не меняют, а только вносят сумбур в головы начинающих программистов.

И несколько слов надо сказать про рекламную чепуху вокруг C++. Обычно в книжках про C++ пишут о том, что программирование в классах позволяет не больше и не меньше как моделировать весь мир. Это весьма странное заявление. Любая программа — это код и данные. Их можно написать отдельно, можно объединить в общую структуру, но от этого принципиально ничего не меняется. Любая программа на С может быть переписана в классах, а любая программа в классах может быть переписана на С.

То есть C++ не дает программисту какого-то ключевого преимущества, именно поэтому язык C++, который позиционировался как замена C, так и не смог его заменить. Для интереса можно посмотреть TIOBE-рейтинг этих языков в сентябре 2020.

Похожие записи:

Комментарии 14

Уважаемый Константин!
Вы написали: «Класс – это объединение кода и данных».
А В ваших «классах» нет данных, там лишь публичные переменные, которые лишают Ваш код одной из главных фишек ООП — объект = чёрный ящик, нельзя ковыряться во внутренностях объекта.
https://jug.ru/2020/09/bugayenko-west/

>А В ваших “классах” нет данных
Переменные — это тоже данные. Добавьте массив — суть примера не изменится.
>там лишь публичные переменные
Добавьте приватную переменнную — суть примера не изменится.
>из главных фишек ООП объект = чёрный ящик, нельзя ковыряться во внутренностях объекта.
Это не фишка ООП, а обычная практика языка Си (да и других языков). Если программист — это автор объекта, то он может «ковыряться во внутренностях» сколько угодно. Если программист не автор объекта, а объект скрыт в модуле, то доступа к нему нет.

Уважаемый Константин!
Если Вы считаете, что «автор объекта, то он может “ковыряться во внутренностях” , то Вы лишили себя инкапсуляции. А лишили Вы себя, как и многие другие, потому что уже научились хорошо программировать процедурно. Без инкапсуляции в ООП вы как рычаг без точки опоры. https://inexsu.wordpress.com/2020/07/28/%D0%BE%D0%BE%D0%BF-%D1%80%D0%B0%D0%B7%D1%80%D1%83%D1%88%D0%B8%D1%82%D1%8C-%D1%81%D0%BE%D0%B1%D0%BE%D1%80-%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C-%D0%B1%D0%B0%D0%B7%D0%B0%D1%80/

До капсуляции дело еще не дошло. Это просто описание, что такое класс.

Все сиплюcплюcшники рекомендуют переменные делать недоступными, и по умолчанию так и есть, по умолчанию доступны методы, а вот в си уже изначально присутствует структура данных struct, не помню, может ли входить метод в структуру языка си, но в структуре си++ как раз наоборот, данные доступны по умолчанию и требуют объявления public а вот методы-функции не доступны по умолчанию, но у класса присутствует конструктор и деструктор, вот что важно, это метод, который есть и по умолчанию и он создаёт объект и может быть определён программистом, а вот у структур такого нету… Казалось бы структура и класс почти одно и тоже, но не совсем. Я бы вот хотел дополнить, что класс это всё таки не шаблон, строго говоря, а новый тип данных, или тип объекта, в котором присутствует «жизнь» не только как набор переменных и констант этаких «существительных», но и «глаголов» , то есть действий с данными. Деструктор тоже можно определить по-своему. А шаблонами в языках программирования называют записи для компиляторов с использованием инструкций для компилятора (макрокоманды), на стадии получения исполняемого или объектного кода, и ещё шаблоном можно бы назвать определение виртуальных функций…. Вообще-то есть у Си++ библиотека шаблонов, шаблонное программирование, там много новеньких понятий для программиста на фортране-79. В общем программирование с классами, это объектно-ориентированное программирование, в котором можно определить свои куски кодов, которые создаются и уничтожаются в программе по мере использования и даже если программист не знает текста а знает что делает объект некоего класса, на основе одного класса он может определить объект своего класса с помощью наследования и работать с ним, они наслаиваются и наслаиваются эти классы.

>класс это всё таки не шаблон
В данной статье слово «шаблон» используется в общепринятом смысле, а не в смысле языка C++.
>программирование с классами, это объектно-ориентированное программирование
Нет. Объектно-ориентированное программирование — это стиль программирования, который можно использовать, а можно и не использовать при программировании с классами.

Цукерберг рекомендует:  Ios - В какой сфере развиваться mobile dev или full-stack dev

Автор застрял в светлом прошлом и явно не хочет смотреть в будущее,а примеры с наследованием особенно неудачные. Аналогия с генетикой и живыми объектами природы,когда каждый из них получал новые свойства и меры,которыми эти объекты используют,чтобы воплощать свои способности.
И ещё,эти два языка нельзя рассматривать по отдельности( C и C++) -они применяются вместе в одном проекте по мере необходимости.Так как по традиции все операционные системы написаны на чистом Си,то конечно он будет лидировать.
Но почему то до по явления C# в прикладом программировании был популярен Pascal Delphi.

>примеры с наследованием особенно неудачные.
Суть примеров — показать, как устроен язык C++.
Если не нравится, то приведите удачный пример наследования, только не абстрактные рассуждения, а конкретный код. Аналогии — это хорошо, но программисту платят не за аналогии, а за написание программ.
>они применяются вместе в одном проекте по мере необходимости.
При программировании в стиле ООП их совмещать нельзя. А так, конечно, при желании можно написать программу, хоть на десяти языках сразу.

«Аналогия с генетикой и живыми объектами природы,когда каждый из них получал новые свойства и меры,которыми эти объекты используют,чтобы воплощать свои способности.» — тут соглашусь. Пример приведенный автором напомнил мне школьный курс, начала 90-х. Хорошим примером использования ООП является примерны реального мира.
Но далее у меня уже серьезные разногласия возникают:
1) «И ещё,эти два языка нельзя рассматривать по отдельности( C и C++) -они применяются вместе в одном проекте по мере необходимости.» — это где вы такое видели? Ну точнее кончено могут быть программы написанные отдельно на C и отдельно на C++, в рамках одного проекта, но вместе код не может быть использован. Не встречал подобных IDE и компиляторов. Может быть конечно Eclipse или NetBean, последних версий, умеют осуществлять такую сборку…
2) «Так как по традиции все операционные системы написаны на чистом Си» — давайте будем честны, далеко не все. Раньше все ОС писали на ассемблере.

C++ — Как сделать меню в C++ ?

Seich
а в чем пишешь?
в Билдере есть такой компонент сразу.
в NetFramework есть тоже..

ну а в если это не подходит
то тогда

Shell_NotifyIcon
Sends a message to the taskbar’s status area.

BOOL Shell_NotifyIcon(
DWORD dwMessage,
PNOTIFYICONDATA lpdata
);

Parameters
dwMessage
[in] Variable of type DWORD that specifies the action to be taken. It can have one of the following values.
NIM_ADD
Adds an icon to the status area. The hWnd and uID members of the NOTIFYICONDATA structure pointed to by lpdata will be used to identify the icon in later calls to Shell_NotifyIcon.
NIM_DELETE
Deletes an icon from the status area. Use the hWnd and uID members of the NOTIFYICONDATA structure pointed to by lpdata to identify the icon to be deleted.
NIM_MODIFY
Modifies an icon in the status area. Use the hWnd and uID members of the NOTIFYICONDATA structure pointed to by lpdata to identify the icon to be modified.
NIM_SETFOCUS
Version 5.0. Returns focus to the taskbar notification area. Taskbar icons should use this message when they have completed their user interface operation. For example, if the taskbar icon displays a shortcut menu, but the user presses ESCAPE to cancel it, use NIM_SETFOCUS to return focus to the taskbar notification area.
NIM_SETVERSION
Version 5.0. Instructs the taskbar to behave according to the version number specified in the uVersion member of the structure pointed to by lpdata. This message allows you to specify whether you want the version 5.0 behavior found on Microsoft® Windows® 2000 systems, or that found with earlier Shell versions. The default value for uVersion is zero, indicating that the original Windows 95 notify icon behavior should be used. For details, see the Remarks section.
lpdata
[in] Address of a NOTIFYICONDATA structure. The content of the structure depends on the value of dwMessage.
Return Values
Returns TRUE if successful or FALSE otherwise. If dwMessage is set to NIM_SETVERSION, the function returns TRUE if the version was successfully changed or FALSE if the requested version is not supported.

Remarks
The taskbar notification area is sometimes erroneously called the «tray.»

Version 5.0 of the Shell, found on Windows 2000, handles Shell_NotifyIcon mouse and keyboard events differently than earlier Shell versions found on Windows NT® 4.0, Windows 95, and Windows 98. The differences are:

If a user selects a notify icon’s shortcut menu with the keyboard, the version 5.0 Shell sends the associated application a WM_CONTEXTMENU message. Earlier versions send WM_RBUTTONDOWN and WM_RBUTTONUP messages.
If a user selects a notify icon with the keyboard and activates it with the space bar or ENTER key, the version 5.0 Shell sends the associated application an NIN_KEYSELECT notification. Earlier versions send WM_RBUTTONDOWN and WM_RBUTTONUP messages.
If a user selects a notify icon with the mouse and activates it with the ENTER key, the version 5.0 Shell sends the associated application an NIN_SELECT notification. Earlier versions send WM_RBUTTONDOWN and WM_RBUTTONUP messages.
If a user passes the mouse pointer over an icon with which a balloon ToolTip is associated, the version 5.0 Shell sends the following messages.
NIN_BALLOONSHOW — Sent when the balloon is shown (balloons are queued).
NIN_BALLOONHIDE — Sent when the balloon disappears—when the icon is deleted, for example. This message is not sent if the balloon is dismissed because of a timeout or mouse click by the user.
NIN_BALLOONTIMEOUT — Sent when the balloon is dismissed because of a timeout.
NIN_BALLOONUSERCLICK — Sent when the balloon is dismissed because the user clicked the mouse.
You can select which way the Shell should behave by calling Shell_NotifyIcon with dwMessage set to NIM_SETVERSION. Set the uVersion member of the NOTIFYICONDATA structure to indicate whether you want pre-version 5.0 behavior or version 5.0 and later behavior.

Note The messages discussed above are not conventional Windows messages. They are sent as the lParam value of the application-defined message that is specified when the icon is added with NIM_ADD.

Windows 95/98/Me: Shell_NotifyIcon is supported by the Microsoft Layer for Unicode. To use this, you must add certain files to your application as outlined in Microsoft Layer for Unicode on Windows 95/98/Me Systems.

Requirements
Version 4.00 and later of Shell32.dll

Windows NT/2000: Requires Windows NT 4.0 or later.
Windows 95/98/Me: Requires Windows 95 or later.
Header: Declared in Shellapi.h.
Import Library: Shell32.lib.

ну и вот сама структура NOTIFYICONDATA

typedef struct _NOTIFYICONDATA <
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
#if (_WIN32_IE = 0x0500)
DWORD dwState;
DWORD dwStateMask;
TCHAR szInfo[256];
union <
UINT uTimeout;
UINT uVersion;
> DUMMYUNIONNAME;
TCHAR szInfoTitle[64];
DWORD dwInfoFlags;
#endif
#if (_WIN32_IE >= 0x600)
GUID guidItem;
#endif
> NOTIFYICONDATA, *PNOTIFYICONDATA;

Members
cbSize
Size of this structure, in bytes.
hWnd
Handle to the window that receives notification messages associated with an icon in the taskbar status area. The Shell uses hWnd and uID to identify which icon to operate on when Shell_NotifyIcon is invoked.
uID
Application-defined identifier of the taskbar icon. The Shell uses hWnd and uID to identify which icon to operate on when Shell_NotifyIcon is invoked. You can have multiple icons associated with a single hWnd by assigning each a different uID.
uFlags
Flags that indicate which of the other members contain valid data. This member can be a combination of the following: Flag Description
NIF_ICON The hIcon member is valid.
NIF_MESSAGE The uCallbackMessage member is valid.
NIF_TIP The szTip member is valid.
NIF_STATE The dwState and dwStateMask members are valid.
NIF_INFO Use a balloon ToolTip instead of a standard ToolTip. The szInfo, uTimeout, szInfoTitle, and dwInfoFlags members are valid.
NIF_GUID Reserved.

uCallbackMessage
Application-defined message identifier. The system uses this identifier to send notifications to the window identified in hWnd. These notifications are sent when a mouse event occurs in the bounding rectangle of the icon, or when the icon is selected or activated with the keyboard. The wParam parameter of the message contains the identifier of the taskbar icon in which the event occurred. The lParam parameter holds the mouse or keyboard message associated with the event. For example, when the pointer moves over a taskbar icon, lParam is set to WM_MOUSEMOVE. See the Taskbar guide chapter for further discussion.
hIcon
Handle to the icon to be added, modified, or deleted.
szTip
Pointer to a null-terminated string with the text for a standard ToolTip. It can have a maximum of 64 characters including the terminating NULL.
For Version 5.0 and later, szTip can have a maximum of 128 characters, including the terminating NULL.

dwState
Version 5.0. State of the icon. There are two flags that can be set independently. Flag Description
NIS_HIDDEN The icon is hidden.
NIS_SHAREDICON The icon is shared.

dwStateMask
Version 5.0. A value that specifies which bits of the state member are retrieved or modified. For example, setting this member to NIS_HIDDEN causes only the item’s hidden state to be retrieved.
szInfo
Version 5.0. Pointer to a null-terminated string with the text for a balloon ToolTip. It can have a maximum of 255 characters. To remove the ToolTip, set the NIF_INFO flag in uFlags and set szInfo to an empty string.
uTimeout
Union with uVersion. The timeout value, in milliseconds, for a balloon ToolTip. The system enforces minimum and maximum timeout values. uTimeout values that are too large are set to the maximum value and values that are too small default to the minimum value. The system minimum and maximum timeout values are currently set at 10 seconds and 30 seconds, respectively. See the remarks for further discussion of uTimeout.
uVersion
Version 5.0. Union with uTimeout. Specifies whether the Shell notify icon interface should use Windows 95 or Windows 2000 behavior. For more information on the differences in these two behaviors, see Shell_NotifyIcon. This member is only employed when using Shell_NotifyIcon to send an NIM_VERSION message. Value Description
0 Use the Windows 95 behavior. Use this value for applications designed for Windows versions prior to Windows 2000.
NOTIFYICON_VERSION Use the Windows 2000 behavior. Use this value for applications designed for Windows 2000 and later.

szInfoTitle
Version 5.0. Pointer to a null-terminated string containing a title for a balloon ToolTip. This title appears in boldface above the text. It can have a maximum of 63 characters.
dwInfoFlags
Version 5.0. Flags that can be set to add an icon to a balloon ToolTip. It is placed to the left of the title. If the szTitleInfo member is zero-length, the icon is not shown. These flags are mutually exclusive. Flag Description
NIIF_ERROR An error icon.
NIIF_INFO An information icon.
NIIF_NONE No icon.
NIIF_WARNING A warning icon.
NIIF_ICON_MASK Version 6.0. Reserved.
NIIF_NOSOUND Version 6.0. Do not play the associated sound. Applies only to balloon ToolTips.

guidItem
Version 6.0. Reserved.
Remarks
If you set the NIF_INFO flag in the uFlags member, the standard ToolTip is replaced by a balloon ToolTip. For more discussion of balloon ToolTips, see the ToolTip Controls chapter.

No more than one balloon ToolTip at a time is displayed for the taskbar. If an application attempts to display a ToolTip when one is already being displayed, the ToolTip will not appear until the existing balloon ToolTip has been visible for at least the system minimum timeout value. For example, a balloon ToolTip with uTimeout set to 30 seconds has been visible for seven seconds when another application attempts to display a balloon ToolTip. If the system minimum timeout is ten seconds, the first ToolTip displays for an additional three seconds before being replaced by the second ToolTip.

Note that several members of this structure are only supported for Shell32.dll versions 5.0 and later. To enable these members, include one of the following in your header.

#define _WIN32_IE 0x0500
#define _WIN32_IE 0x0600

However, you must initialize the structure with its size. If you use the size of the currently defined structure, the application may not run with the earlier versions of Shell32.dll, which expect a smaller structure. You can run your application on pre-5.0 versions of Shell32.dll by defining the appropriate version number (see Shell and Common Controls Versions). However, this may cause problems if your application also needs to run on systems with more recent versions.

Your can keep your application compatible with all Shell32.dll versions while still using the current header files by setting the size of the NOTIFYICONDATA structure appropriately. Before initializing the structure, use the DllGetVersion function to determine which Shell32.dll version is installed on the system. If it is version 5.0 or greater, initialize the cbSize member with:

n > Setting cbSize to this value enables all the version 5.0 and 6.0 enhancements. For earlier versions, the size of the pre-6.0 structure is given by the NOTIFYICONDATA_V2_SIZE constant and the pre-5.0 structure is given by the NOTIFYICONDATA_V1_SIZE constant. Initialize the cbSize member with:

n > Using this value for cbSize enables your application to use NOTIFYICONDATA with earlier Shell32.dll versions, although without the version 6.0 enhancements.

c++ — Как создать пункт меню радио в c++?

Я только начал C++, и я искал в Интернете способы создания элемента меню радио, но я совершенно смущен.

Предпочтительный пример поможет мне разобраться.

Итак, я хочу, чтобы создать простой пункт меню радио, как это: http://i.imgur.com/7UrUtjS.png

но я зациклился на том, как создать элемент меню радио. Пока у меня это:

    2 1
  • 21 май 2020 2020-05-21 23:29:16
  • CodeDoctorJL

1 ответ

«Радио» логическое поведение элементов меню должно быть обеспечено вашим кодом. После того, как вы создали элементы меню, используйте ModifyMenu, чтобы добавить/удалить галочку или растровое изображение для соответствующих элементов.

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих
07.06.2003, 02:50 # 5