Лабораторная работа №4
«Создание меню. Диалоговые окна: работа с кнопками и текстовыми полями в Visual C++»
Указания к выполнению лабораторной работы № 6
Создание меню
Первая программа этой лабораторной работы будет простой. Она добавит в меню File новую команду Print Welcome. Когда пользователь выберет ее, в клиентской области окна должен появиться текст «Добро пожаловать в меню!»
1.1. Воспользуемся AppWizard и создадим программу с именем menus с однодокументным интерфейсом (SDI).
1.2. С помощью редактора меню Visual C++ включим новую команду в меню File. Чтобы запустить редактор меню перейдите на вкладку ResourseView в окне просмотра. Откроется перечень ресурсов программы menus. Найдите в списке строку Menu и откройте ее. Дважды щелкните на строке IDR_MAINFRAME – это приведет к запуску редактора меню (рис. 1).
Рис. 1. Редактор меню Visual C++
Так как мы собираемся добавить в меню новую команду Print Welcome, щелкните на меню File, потом на Print Preview и нажмите клавишу Insert. После этого в меню появится новая команда. Дважды щелкните на ней – откроется диалоговое окно Menu Item Properties (рис. 2), содержащее свойства команды.
|
|
Рис. 2.
Занесите в поле Caption строку Print Welcome и закройте окно. Новой команде автоматически присваивается идентификатор ID_FILE_PRINTWELCOME. Новая команда внесена в меню. Закройте редактор меню. Следующим шагом станет подключение команды к коду программы, чтобы стало возможным обрабатывать ее вызов из меню.
1.3. ClassWizard поможет подключить команду меню к обработчику, который будет запускаться при ее вызове из меню. Откройте окно ClassWizard (рис.3).
Рис. 3. Подключение команды меню к методу в программе на Visual C++.
Идентификатор новой команды ID_FILE_PRINTWELCOM уже присутствует в списке Object IDs. Проследите, чтобы в списке Class name был выбран класс виды CMenusView. Выделите строку ID_FILE_PRINTWELCOM в списке Object IDs, затем щелкните на строке Command в списке Messages. ClassWizard предложит присвоить обработчику имя OnFilePrintWelcome() – нажмите кнопку Ок. После этого новый метод появится в списке Member functions окна ClassWizard.
1.4. Дважды щелкните на строке OnFilePrintWelcome() в списке Member functions, и в окне справа появится код метода:
void CMenusView::OnFilePrintwelcome()
{
// TODO: Add your command handler code here
}
Этот метод будет вызываться при выполнении пользователем команды Print Welcome, поэтому в него следует поместить соответствующий код. В нашем примере при выполнении команды должна выводиться строка «Добро пожаловать в меню!», поэтому выделим место для хранения этой строки:
public:
virtual ~CMenusDoc();
CString StringData;
В конструкторе документа StringData объект будет инициализироваться пустой строкой:
CMenusDoc::CMenusDoc()
{
StringData = "";
}
Далее в методе OnFilePrintWelcome(), принадлежащему объекту вида, получим указатель pDoc на объект документа, занесем в объект StringData строку «Добро пожаловать в меню!» и отобразим ее в окне:
|
|
void CMenusView::OnFilePrintwelcome()
{
CMenusDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc->StringData = "Добро пожаловать в меню!";
Invalidate();
}
1.5. Добавим в метод OnDraw() код для вывода строки:
void CMenusView::OnDraw(CDC* pDC)
{
CMenusDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->TextOut(0, 0, pDoc->StringData);
}
Запустите программу, результат ее работы показан на рис. 4.
Рис. 4
Разобравшись с основами, попробуем создать новое меню, заблокировать его команды, добавим в программу подменю, клавиши ускоренного вызова, организуем вызов справочной информации в строке состояния, научимся определять акселераторы.
1.6. Создадим при помощи AppWizard SDI-программу с именем fullmenus. Откройте ее ресурс меню, IDR_MAINFRAME, в редакторе меню (рис. 5).
Рис. 5
Начнем с добавления меню Demo. Оно должно располагаться между меню File и Edit. Выделим меню Edit в редакторе и нажмем клавишу Insert. В строке появится новое меню, дважды щелкним на нем и присвоим ему имя Demo в окне Menu Item Properties. В строке появится меню Demo (рис. 5).
1.7. Теперь мы должны добавить в меню Demo команды. Редактор меню уже включил в него пустую команду – щелкните на ней и дайте ей имя Grayed (рис. 6).
Рис. 6
Редактор автоматически присваивает ей идентификатор ID_DEMO_GRAYED. Эта команда будет заблокированной, то есть недоступной для пользователя. Аналогичным образом добавьте команды Checked и Submenus. Достаточно дать командам эти имена, и редактор меню автоматически присвоит им нужные идентификаторы.