http://tikitak.narod.ru ---- Главная страница сайта
Шаг 6 - Создание меню
Создание проекта
Проект пока Step1. Но в нем нам нужно создать файл ресурсов. Тут вот придется потрудиться. У вас в левом углу должно быть окно WorkSpace, если его нет включите через View - WorkSpace.
В этом окне есть вкладка File View. Нам туда. Там надо создать файл
step1.rc, как в первом шаге step1.cpp. У вас спросят нужно ли его создавать на диске , ответьте положительно пожалуйста.
Далее нам на вкладку Resource. Там пусто. Мышку на папку, правую кнопку вниз, пункт меню Insert. В окне выбираем меню и New. Создайте меню. Пунк File и ниже Exit. Обязательно поменяйте идентификатор на IDC_MENU , и обязательно создайте файл. На значек папки, левую кнопку мышки вниз, пунк Save.
В списке файлов (WorkSpace) вы не найдете resource.h, если необходимо добавьте его (Add File to Project).
Создаем код
Добавляем в раздел описаний ссылку на файл с идентификаторами ресурсов #include "resource.h"
Добавляем описание класса меню в класс рамки окна. Замечаете, на всё есть класс, это класс !!
class CMainWnd : public CFrameWnd
{
public:
CMainWnd();
afx_msg void OnLButtonDblClk( UINT, CPoint );
afx_msg void OnRButtonDblClk( UINT, CPoint );
afx_msg void OnKeyDown( UINT, UINT, UINT );
int OnCreate(LPCREATESTRUCT lpCreateStruct);
private:
CStatusBar m_wndStatusBar;
CMenu m_wndMenu; // Это наш класс Меню
CStatic* MyStatic;
CMyButton* MyButton;
CEdit* MyEdit;
DECLARE_MESSAGE_MAP();
};
Добавляем в процедуру создания окна команды создания меню.
int CMainWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
m_wndStatusBar.Create(this);
m_wndMenu.LoadMenu(IDC_MENU);
// Загрузить меню из файла ресурса
SetMenu(&m_wndMenu);
// Установить меню
return 0;
}
Описание
Использование ресурсов является таким же приемом программирования в Windows, как прямое обращение к видеопамяти в DOS. Использовать ресурсы необязательно , всё можно сделать динамически ! Но в ресурсах есть и преимущества. Вы сталкивались с тем, что Ваши специалисты теряются в английском ? У Вас было желание перевести программу на русский ? Любую программу с ресурсами можно изменить не перекомпилируя EXE файл. Меню, диалоговые панели, строки подсказки, иконы, картинки все это чаше всего находится в ресурсах. В Borland C++ 4.5 была очень хорошая программа Resource WorkShop она позволяла извлечь ресурсы из файла , редактировать и сохранять их на место, самое главное это отдельная программа и очень удобная.
Как и с элементами управления, каждый элемент ресурсов должен иметь идентификатор. В Windows идентификаторы на каждом шагу, как в известном мультфильме Билл всех подсчитал . Правило очередное - каждый ресурс должен быть пронумерован.
Идентификаторы ресурсов хранятся в .h файлах. При создании файла ресурсов VC автоматически создает файл с описанием идентификатора ресурсов - "resource.h", его то мы и подключили первой командой. Как бы иначе программа догадалась, что они существуют ?
Далее мы указали классу окна, что у нас есть класс меню. Он статический, это мы уже делали ранее.
После этого для создания и отображения меню необходимо выбрать место для загрузки меню из ресурсов. OnCreate на данный момент самое подходящее, но не обязательное.
LoadMenu функция загрузки меню из ресурсов. Она возвращает значение типа BOOL указывающее на успех операции. Я это упустил сознательно. Если есть желание можете написать что-то типа if (m_wndMenu.LoadMenu(IDC_MENU)) .... else .... . Параметр только один - идентификатор меню в ресурсах.
SetMenu устанавливает меню в окне. Она требует адресс класса типа CMenu. Имея статический класс CMenu адресс можно получить применив операцию взятия адреса &CMenu. Её мы и применили. Правило для статических классов Адрес Класса = &Класс
Шпаргалка
- Объявить класс меню
CMenu m_wndMenu;
..............
- Загрузить и установить меню
m_wndMenu.LoadMenu(IDC_MENU);
SetMenu(&m_wndMenu);
...............
Предыдущий Шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|