Пятница, 22.11.2024, 18:42 | Приветствую Вас Гость

C/С++ Программирование на языке высокого уровня

Главная » Статьи » Мои статьи

Создание пользовательского пункта системного меню на C
Способ 1
Выбор системного меню приложения обрабатывается сообщением wm_syscommand. Нужно выполнить два действия: записать новый пункт меню и предусмотреть реакцию на его выбор. Создается пункт меню с помощью функции appendmenu. Можно создать разделитель или строку меню, задав соответствующий флаг. По причине того, что может быть создан не один пункт меню, для его идентификации надо создать переменную (в данном случае idsysabout) и символьную строку, отображающую наименование пункта меню. Далее надо перехватить нужное сообщение. Это можно сделать аналогично предыдущему примеру, задав в заголовочном файле карту сообщений. Содержимое файла unit1.h ничем не отличается от предыдущего, а функция wmsys сможет распознать щелчок на созданном пункте меню, получив на входе в поле cmdtype заданное значение. В данном примере появится окно-сообщение с дополнительной информацией. Однако ничто не мешает написать, например, какую-либо игру или калькулятор и вызвать их при выборе пользовательского пункта меню. Осуществляется перехват данного типа сообщения, поэтому для проведения стандартной обработки любого другого системного сообщения надо не забывать вызвать метод dispatch.

Содержимое файла unit1.cpp:

#include
#pragma hdrstop
#include "unit1.h"

//---------------------

#pragma package(smart_init)
#pragma resource "*.dfm"
tform1 *form1;
int idsysabout = wm_user+2;
//---------------------

__fastcall tform1::tform1(tcomponent* owner)
: tform(owner)
{
}

//---------------------

void __fastcall tform1::formcreate(tobject *sender)
{
appendmenu(getsystemmenu(handle,false),mf_separator,0,"");
appendmenu(getsystemmenu(handle,false),mf_string,idsysabout,"&about");
}

//---------------------

void __fastcall tform1::wmsys(twmsyscommand& message)
{
if (message.cmdtype == idsysabout)
showmessage("Этот пункт меню сделан мной");
else tform:: dispatch(&message);
}

Способ 2
Выше описано создание пункта системного меню с помощью карты сообщений. Эту же задачу можно выполнить другим способом. Объект application имеет возможность производить обработку собственных сообщений в пользовательской функции-обработчике. Эта функция имеет следующее описание:

void __fastcall wmsys(tagmsg& message, bool& handled);

Чтобы реагировать на сообщения, в файле unit1.cpp при создании формы надо указать:

application–>onmessage=wmsys;

Информация о поступившем сообщении будет находиться в структуре message, из полей которой не составит проблемы распознать нужное сообщение.

Содержимое файла unit1.cpp:

#include
#pragma hdrstop
#include "unit1.h"

//---------------------

#pragma package(smart_init)
#pragma resource "*.dfm"
tform1 *form1;
int idsysabout=wm_user+2;

//---------------------

__fastcall tform1::tform1(tcomponent* owner)

: tform(owner)
{
}

//---------------------

void __fastcall tform1::wmsys(tagmsg& message, bool& handled)
{
if ((message.message==wm_syscommand)&&(message.wparam==idsysabout))
{
showmessage("Этот пункт меню сделан мной");
handled=true;
}
}

void __fastcall tform1::formcreate(tobject *sender)

{
appendmenu(getsystemmenu(handle,false),mf_separator,0,"");
appendmenu(getsystemmenu(handle,false),mf_string,idsysabout,"&about");
application–>onmessage=wmsys;
}
Категория: Мои статьи | Добавил: PvP (09.05.2010)
Просмотров: 1208 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Меню сайта
Категории раздела
Мои статьи [10]
Наш опрос
Как вы нашли сайт?
Всего ответов: 11
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Жизнь сайта
Добавь!
Поиск
Друзья и рейтинги
Топ100- Программирование