Главная » C++, C++ Builder » Изменение состояния во время исполнения C++ Builder

0

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

Добавьте обработчик для подпункта Сделать отображаемыми владельцем  в  пункте  меню Изменить. В этот обработчик (названный MakeOwnerDraw1Click) добавьте следующий код:

void __fastcall TForm1::MakeOwnerDraw1Click(TObject *Sender)

{

ModifyMenu(MainMenu1->Handle, Ralph1->Command,

MF_BYCOMMAND | MF_OWNERDRAW,

Ralph1->Command, 0);

}

Если этот код кажется вам знакомым, то вы в принципе правы. Это тот же самый код, который мы использовали ранее для того, чтобы сделать элемент отображаемым  владельцем.  Следующий пункт меню, Сделать нормальным, более интересен. Добавьте для него обработчик, назовите его MakeNormal1Click, и добавьте в него следующий код:

void __fastcall TForm1::MakeNormal1Click(TObject *Sender)

{

ModifyMenu(MainMenu1->Handle, Ralph1->Command, MF_BYCOMMAND | MF_STRING,

Ralph1->Command, "Ральф");

}

Это более обычный для функции API ModifyMenu вид. Этот вызов функции переустановит элемент меню Ralph так, что он будет обычной строкой и установит текст для него в «Ральф». Команда для пункта меню останется той же самой, поскольку мы передаем один и тот же идентификатор команды в старой и новой позициях. Отметьте, что мы передаем флаг MF_STRING чтобы показать, что мы хотим изменить текст пункта меню так, чтобы он был  нормальной строкой. Если вы теперь скомпилируете и запустите приложение, выбор этого пункта меню будет изменять первый пункт меню так, что в нем будет отображать либо цветной прямоугольник, либо строку текста («Ральф»).

Замечание

Вы, наверное, обратите внимание на то, что первый раз, когда вы выбираете пункт меню Сделать нормальным и потом выбираете первый пункт меню, текст Ральф отображен большим, чем обычно, шрифтом. Если навести на этот пункт (Ральф) курсор, он опять отобразится нормальным шрифтом. Это глюк Windows 95/NT API.

Вот и все, что касается нашего примера и работы с меню, отображаемыми их владельцем  в CBuilder. Как вы видите, работа с ними вовсе не так уж сильно отличается от работы с любыми другими элементами, отображаемыми их владельцем. Счастливо порисовать!

Источник: Теллес М. – Borland C++ Builder. Библиотека программиста – 1998

По теме:

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