Сегодня мы поговорим о том, как создаются кнопки. За основу возьмем наш шаблон (если вы не читали статью "Минимальная программа на Win API", прочтите, именно с этим шаблоном мы будем работать). На некоторых кнопках нарисуем стандартные иконки, на некоторых выведем текст. И конечно обработаем событие, вызываемое нажатием на кнопку. Кроме этого, кнопки с текстом смогут иметь "фокус", который будет оставаться после нажатия на одну из них.
Начнем с того, что для каждой кнопки создадим константу с уникальным идентификационным номером. Объявление самих кнопок удобнее всего сделать в виде массива, это сделает код более компактным. Также создадим переменные для работы с иконками и шрифтом.
const
// Кнопки, на которые будут выведены иконки
BTN_APPLICATION = 0;
BTN_HAND = 1;
BTN_QUESTION = 2;
BTN_EXCLAMATION = 3;
BTN_ASTERISK = 4;
BTN_WINLOGO = 5;
// Кнопки, на которые будет выведен текст
BTN_TEXT_0 = 6;
BTN_TEXT_1 = 7;
BTN_TEXT_2 = 8;
var
Buttons: array[0..8] of HWND;
Icon: HICON;
Font: HFONT;
Кнопка, по своей сути, немногим отличается от главной формы приложения (это самостоятельное окно, имеющее "родителя", и обладающее своим собственным дескриптором). По этому для ее создания воспользуемся уже знакомой функцией CreateWindowEx. Посмотрим, как создается кнопка с иконкой.
Второй параметр функции CreateWindowEx говорит о том, что мы создаем именно кнопку. Определяя стиль кнопки, мы указываем, что она имеет родителя (WS_CHILD, дескриптор родителя указывается в 9-ом параметре) и будет отображать иконку (BS_ICON). С остальными параметрами мы уже знакомы. Функция LoadIcon загружает указанную иконку в наше приложение. Если первый параметр 0 (как в нашем случае), это значит, что мы работаем со стандартными системными значками (их константы указаны в модуле Windows). Загрузив иконку, назначаем ее кнопке, послав соответствующее сообщение. Остальные кнопки создаются по аналогии.
Buttons[8] := CreateWindowEx( WS_EX_STATICEDGE, ′Button′, ′Button3′,
BS_DEFPUSHBUTTON or WS_VISIBLE or WS_CHILD,
210, 70, 90, 40, Wnd, BTN_TEXT_2, hInstance, nil );
Основное отличие от создания предыдущих кнопок заключается в том, что в 3-ем параметре вместо nil пишется заголовок кнопки. Обратите внимание, в описании стиля отсутствует константа BS_ICON. В принципе этого достаточно для того, чтобы отобразить надпись на кнопке (посмотрите на создание последней кнопки - Buttons[8]). Однако мы можем кое-что сделать с текстом, а именно, изменить стиль шрифта. Делается это с помощью функции GetStockObject, параметром которой и задается необходимый нам стиль.
Обратим внимание на то, что последняя кнопка выглядит не совсем так, как остальные. Добиться такого результата можно, используя константу BS_DEFPUSHBUTTON при задании стиля.
Теперь посмотрим, как следует обрабатывать событие, полученное от нажатия кнопки.
function WindowProc( Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM ): LRESULT; stdcall;
begin
case Msg of
WM_DESTROY: begin
PostQuitMessage( 0 );
Result := 0;
Exit;
end;
// Обработка сообщений от кнопок
WM_COMMAND:
case LoWord( wParam ) of
BTN_APPLICATION: MessageBox( Wnd, ′IDI_APPLICATION′, ′Константа:′, MB_OK );
BTN_HAND: MessageBox( Wnd, ′IDI_HAND′, ′Константа:′, MB_OK );
BTN_QUESTION: MessageBox( Wnd, ′IDI_QUESTION′, ′Константа:′, MB_OK );
BTN_EXCLAMATION: MessageBox( Wnd, ′IDI_EXCLAMATION′, ′Константа:′, MB_OK );
BTN_ASTERISK: MessageBox( Wnd, ′IDI_ASTERISK′, ′Константа:′, MB_OK );
BTN_WINLOGO: MessageBox( Wnd, ′IDI_WINLOGO′, ′Константа:′, MB_OK );
BTN_TEXT_0: begin
MessageBox( Wnd, ′Button1′, ′Кнопка:′, MB_OK );
SetFocus( Buttons[6] );
end;
BTN_TEXT_1: begin
MessageBox( Wnd, ′Button2′, ′Кнопка:′, MB_OK );
SetFocus( Buttons[7] );
end;
BTN_TEXT_2: begin
MessageBox( Wnd, ′Button3′, ′Кнопка:′, MB_OK );
SetFocus( Buttons[8] );
end;
end;
else
Result := DefWindowProc( Wnd, Msg, wParam, lParam );
end;
end;
Как видим, нам нужно обработать сообщение WM_COMMAND. Параметр wParam хранит уникальный идентификатор кнопки, которая вызвала это событие. Сравниваем его с определенными в самом начале константами, идентифицируем кнопку, и выполняем связанный с ней код.
И последнее на сегодня. В нашей программе кнопки с текстом должны иметь фокус. Для этого, после выполнения кода, связанного с кнопкой, вызываем процедуру SetFocus. Теперь посмотрим, как это работает. После того, как мы уберем сообщение, вызванное нажатием на одну из трех нижних кнопок, мы увидим на ней пунктирный прямоугольник, нарисованный рядом с бордюром. Это и есть результат работы процедуры SetFocus. Теперь, нажав на клавишу "пробел", мы заставим эту кнопку сработать.
<b>Авторесурс - продажа запчастей МАЗ, ММЗ, МТЗ и ЯМЗ</b>
Авторесурс - это группа компаний, работающих на рынках автомобильной промышленности Российской Федерации и Республики Беларусь. Авторесурс - это официальный дилер МАЗ, ММЗ и ЯМЗ. Наши представительства открыты в Москве, Ростове-на-Дону и Минске. Авторесурс - это в первую очередь и профессиональная команда специалистов, которые ответственно подходят к своей работе и способны реализовать все пожелания клиентов.
<a href=http://mazprice.ru/catalog/yamz/4/>диск сцепления на маз 184</a>
<a href=http://mazprice.ru/gallery/maz/gruppa-38-pribory/>фото датчиков на панели приоров маз 64229</a>
<a href=http://mazprice.ru/catalog/maz/gruppa-50-kabina/>цена на кабину маз</a>
Хай всем заходите на наш сайт, на нем Вы найдете громадную коллекцию фильмов, всех жанров и направлений <a href=http://qi-qi.ru> смотреть кино </a> . Ежечасные обновления, старые, документальные, отечественные и зарубежные фильмы всех жанров. Рай для киноманов. Только лучшее, только для Вас!!!
2011-11-02 08:12:09
Soonrysom
Наш сайт создан для Вашего удовольствия, здесь Вы можете расслабиться, отдохнуть не только душой, но и телеом, все самые мыслимые и не мыслимые удовольствия исполнят наши элитные индивидуалки,
Заходим сюда, звоним http://tinyurl.com/6aoezad
Наслаждаемся ))))
Вас ждет масса незабываемых впечатлений и ощущений )))
Вебмастера, кто желает хорошо зарабатывать, участвуем в партнерской программе,
до 60 центов за 1 клик http://tinyurl.com/5r2vr3w
2011-11-02 00:19:42
PEAGMASSE
Друзья если Вам нужно скачать бесплатно с файлобменников, софт, игры, программы, фильмы, обои, фотошоп и многое дургое но не можете найти здесь есть все что нужно, программы, игры, софт, книги, журналы, фильмы заходим качаем, бесплатно <a href=http://www.alfa-z.info/> только секс по этим </a>
Всегда свежие ключи Nod 32 здесь <a href=http://www.alfa-z.info/26730-klyuchi-dlya-nod32-na-25092011.html> Ключи Nod 32 </a>
Здесь можно скачать любые свежие фильмы совершенно бесплатно <a href=http://www.alfa-z.info/film/> фильмы бесплатно </a>
2011-10-20 07:14:06
LobazevMN
Спасибо за статью! Сам лет два пользуюсь клеем АГАТ и только им. Вообще не беспокоюсь за результат. www.agat-stroy.ru
2010-04-17 13:14:25
Meg
Очень хорошо...начал понимать принцип работы.
Сделал тоже самое на GCC