Окт 16

Добавление меню к окну приложения

После определения меню в файле описания ресурсов оно еще не появится в составе окна приложения. Чтобы это случилось, меню нужно присоединить к окну. Для этого можно использовать несколько способов.
Наиболее традиционным способом является присваивание полю LpszMenuName структуры WNDCLASSEX значения указателя на имя меню, что надо сделать еще перед регистрацией класса окна. Если имя меню определено как целочисленный идентификатор (например, IDR_MENU1), то применяйте макрос MAKEINTRESOURCE для получения значения, присваиваемого полю LpszMenuName.
Так как во всех примерах программного кода в данной книге главное окно приложения создается с использованием объекта класса KWnd, то рассматриваемый способ присоединения меню реализуется передачей значения MAKEINTRES0URCE(IDR_MENU1) параметру menuName конструктора класса KWnd .
Напомним, что оконный класс1, регистрируемый с использованием структуры wc типа WNDCLASSEX, определяет меню, используемое по умолчанию всеми окнами этого класса. А что значит «используемое по умолчанию»? Только то, что при создании окна с помощью функции CreateWindow параметру hMenu этой функции передается значение NULL. Это видно в коде конструктора класса KWnd.
Вы можете связать с окном при его создании другое меню, отличающееся от того, которое применяется по умолчанию. В этом способе требуемое меню сначала загружается при помощи функции LoadMenu, имеющей следующий прототип:
HMENU LoadMenu(HINSTANCE hlnstance, LPCTSTR IpMenuName);
Затем дескриптор меню hMenu, возвращаемый функцией LoadMenu, передается параметру hMenu функции CreateWindow.
Есть и еще один способ назначения меню, когда для этой цели используется функция SetMenu:
BOOL SetMenu(HWND hWnd. HMENU hMenu);
В качестве параметров данная функция принимает дескриптор окна и дескриптор меню, возвращенный функцией LoadMenu. Новое меню заменяет старое меню, если оно уже было.