Шаг 138 - Галочки рядом с меню

-----Исходное сообщение-----
От: Radovets Konstantin 
Кому: kaev@yandex.ru 
Дата: 9 марта 2000 г. 10:14
Тема: mfcbystep
Привет Артем!!!
Такого клевого сайта я еще нигде не видел.
У меня к тебе есть небольшой вопрос:
Ты не знаешь как можно   добавлять галочки или ярлычки в меню.
Например, в меню "Вид" есть подменю "Cтрока состояния"
Искренне благодарен за ответ,  Константин. 

Итак, галочки так галочки. Нет бы кто написал, мол отдохни немного мы поможем, а тут галочки :-))) И прямо после 8 марта на больную голову :-)))

Делаем проект как MFC AppWizard лучше как SDI с именем MyMenu, остальное не важно. У этого проекта будет меню честное слово. Так вот давайте переключимся на вкладку Resource. Зайдем в меню и добавим пункт test в меню Help. Для того, чтобы вообще-то галочка была всего-то нужно установить флаг checked.

138.gif (4354 b)

Теперь давайте привяжем к нему код. Лучше через Class Wizard. Если вы сделаете так же, как я то процедура обработки пункта меню должна быть такая, а код естественно сами допишите или возьмете проект.

void CMainFrame::OnHelpTest() 
{
	CMenu* cm=GetMenu();
	if (cm->GetMenuState(ID_HELP_TEST,MF_BYCOMMAND) & MF_CHECKED)
		cm->CheckMenuItem(ID_HELP_TEST,MF_UNCHECKED); 
	else
		cm->CheckMenuItem(ID_HELP_TEST,MF_CHECKED);
}

Итак, есть функция у класса CWnd, который является дальним, но прямым родственником нашего класса, и который наложил существенный отпечаток на наш класс. Эта функция GetMenu

CMenu* GetMenu( ) const;

Она возвращает указатель на меню приложения. Вообще-то она может быть и NULL, но я то знаю что меню у меня есть вроде, поэтому проверять не стал, а наверно стоит :-). А дальше я пользуюсь функцией GetMenuState уже класса CMenu дабы убедиться, что меню на основе идентификатора ID_HELP_TEST с галочкой MF_CHECKED и меняю ситуацию на обратную используя функцию, которая умеет это делать CheckMenuItem. Во как.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 9.03.2000