» Главная
eXcode.ru » Статьи » Delphi/Pascal » WinAPI
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 11





Создание CheckBox′ов средствами WinAPI




Источник: http://decoding.narod.ru/api/checkbox/checkbox.html

Сегодня наша программа научится работать с CheckBox′ами. CheckBox можно представить как "флаг", который можно установить или сбросить, и в зависимости от его состояния выполнять определенные действия. Программисты очень часто используют этот элемент управления, так что давайте, разберемся, как это делается на Win API.

Помимо CheckBox′ов, на форме присутствуют метки ("Static") и кнопки ("Button"), но их я рассматривать не буду, так как мы уже умеем с ними работать. Как обычно, начнем с объявления констант и переменных.


const
IDChBox1 = WM_USER+1;
IDChBox2 = WM_USER+2;
IDChBox3 = WM_USER+3;
IDBtn1 = WM_USER+4;
IDBtn2 = WM_USER+5;

var
ChBox1: HWND;
ChBox2: HWND;
ChBox3: HWND;
Label1: HWND;
Label2: HWND;
Btn1: HWND;
Btn2: HWND;


Обратим внимание на то, как задаются константы. Как вы знаете, взаимодействие Windows с приложениями происходит по средствам сообщений. Но не всегда программисту бывает достаточно тех сообщений, которые предопределены в системе. Windows позволяет программисту создать свое, так называемое, пользовательское сообщение. Весь диапазон чисел ниже $0400 (WM_USER) зарезервирован под системные сообщения, следовательно, пользовательские сообщения должны начинаться с WM_USER+1.

Но ведь раньше мы так не делали. Почему? Я просто хотел показать, что даже если мы не будем следовать этому правилу, Windows не допустит конфликтов в таком важном для работы системы механизме, как сообщения. Ведь от этого напрямую зависит надежность работы операционной системы. Рассмотренный сейчас способ является более правильным, по этому в дальнейшем, мы будем использовать именно его.

Вернемся к CheckBox′ам и посмотрим, как они создаются.


ChBox1 := CreateWindowEx( 0, ′Button′, ′BS_AUTOCHECKBOX′,
WS_CHILD or WS_VISIBLE or BS_AUTOCHECKBOX,
10, 10, 130, 25, Wnd, IDChBox1, hinstance, nil );
SendMessage( ChBox1, WM_SETFONT, GetStockObject( ANSI_VAR_FONT ), 0 );

ChBox2 := CreateWindowEx( 0, ′Button′, ′BS_AUTO3STATE′,
WS_CHILD or WS_VISIBLE or BS_AUTO3STATE,
155, 10, 110, 25, Wnd, IDChBox2, hinstance, nil );
SendMessage( ChBox2, WM_SETFONT, GetStockObject( ANSI_VAR_FONT ), 0 );

ChBox3 := CreateWindowEx( 0, ′Button′, ′BS_CHECKBOX′,
WS_CHILD or WS_VISIBLE or BS_CHECKBOX,
10, 65, 100, 25, Wnd, IDChBox3, hinstance, nil );
SendMessage( ChBox3, WM_SETFONT, GetStockObject( ANSI_VAR_FONT ), 0 );


Здесь нужно обратить внимание на стиль каждого из CheckBox′ов, а именно: BS_AUTOCHECKBOX, BS_AUTO3STATE и BS_CHECKBOX. Рассмотрим каждое немного подробнее. BS_AUTOCHECKBOX - CheckBox имеет два состояния: флажок либо установлен, либо сброшен. BS_AUTO3STATE - CheckBox имеет три состояния: первые два, как у BS_AUTOCHECKBOX, и третье (назовем его неопределенным), когда флажок установлен, но фон окрашен серым цветом вместо белого. BS_CHECKBOX - аналогичен BS_AUTOCHECKBOX за тем исключением, что задача по установке и сбросу флажка ложится на программиста (при клике по BS_AUTOCHECKBOX и BS_AUTO3STATE, их состояние меняется автоматически).

Посмотрим, как нужно обрабатывать событие, вызванное щелчком по CheckBox′у.


function WindowProc( Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM ): LRESULT; stdcall;
var
Res: LRESULT;
begin
case Msg of
WM_DESTROY: begin
PostQuitMessage( 0 );
Result := 0;
Exit;
end;
WM_COMMAND:
case LoWord( wParam ) of
// Обрабатываем BS_AUTOCHECKBOX
IDChBox1: begin
Res := SendMessage( ChBox1, BM_GETCHECK, 0, 0 );
case Res of
BST_CHECKED: SetWindowText( Label1, ′Состояние: включен′ );
BST_UNCHECKED: SetWindowText( Label1, ′Состояние: выключен′ );
end;
end;
// Обрабатываем BS_AUTO3STATE
IDChBox2: begin
Res := SendMessage( ChBox2, BM_GETCHECK, 0, 0 );
case Res of
BST_CHECKED: SetWindowText( Label2, ′Состояние: включен′ );
BST_INDETERMINATE: SetWindowText( Label2, ′Состояние: неопределено′ );
BST_UNCHECKED: SetWindowText( Label2, ′Состояние: выключен′ );
end;
end;
// Обрабатываем BS_CHECKBOX
IDChBox3: begin
Res := SendMessage( ChBox3, BM_GETCHECK, 0, 0 );
case Res of
BST_CHECKED: CheckDlgButton( Wnd, IDChBox3, 0 );
BST_UNCHECKED: CheckDlgButton( Wnd, IDChBox3, 1 );
end;
end;
IDBtn1: CheckDlgButton( Wnd, IDChBox3, 0 );
IDBtn2: CheckDlgButton( Wnd, IDChBox3, 1 );
end;
else
Result := DefWindowProc( Wnd, Msg, wParam, lParam );
end;
end;


Как видите, в этом нет ничего сложного. Используя сообщение BM_GETCHECK, мы узнаем, в каком состоянии находится CheckBox (для наглядности мы выводим соответствующую надпись в поле "Static"). Что касается BS_CHECKBOX, то, как говорилось выше, его состояние программист должен задавать сам. В этом нам поможет функция CheckDlgButton. Если нам надо сбросить флажок, то в третьем параметре мы передаем 0. Любое другое, отличное от нуля, значение приведет к тому, что флажок будет установлен. Значение последнего параметра не может быть отрицательным.

На сегодня все. Удачи в программировании.
К началу статьи





Добавил: LedWormДата публикации: 2005-09-04 18:12:51
Рейтинг статьи:3.57 [Голосов 7]Кол-во просмотров: 25276

Комментарии читателей

Всего комментариев: 2342

2018-12-02 08:30:12
mizoevanatolij
Пройдите 1 регистрацию, сделайте 2 действия
и получайте от 8950 рублей каждые сутки в автоматическом режиме.

Мы гарантируем:
- Первый заработок в течении 60 минут.
- Стабильный доход 24 часа в сутки.
- Поступление денег без задержек.
- Для России, стран СНГ и Европы.
- Без вложений и установки ПО.
- Специально для новичков и людей без опыта.

Более подробная информация на нашем блоге: > https://prostowmr.blogspot.com/ <

2018-12-02 05:59:38
FedExcit
Добрый день!


Обращайтесь на zaimmoskfedex@mail.ru или по ссылке #zajmi-deneg.blogspot.com

2018-11-15 12:17:56
profus
Мы можем предложить очень качественные услуги прокси-серверов пакетами. Вам требуется постоянный частный прокси для работы в Instagram, Вконтакте,Однокласниках или Авито? Вы интересуетесь букмекерскими ставками или покером? SEO,SMM, просто безопасный серфинг или остальные темы? В том случае вы по нужному адресу.


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


Быстрые прокси ipv4 и ipv6 (до 100 мбит/с) обеспечат стабильную работу. Требуются различные подсети, у нас их достаточно. Так же вы имеете возможность выбрать тип протокола HTTP/SOCKS.



[url=https://proxywhite.com/]ipv4 proxy[/url]

2018-11-10 11:15:47
Thomassedge
TM “Фабрика моды” предлагает богатый выбор одежды для женщин отечественного производства. Наша фабрика находится в Одессе, [url=http://fabrika-mody.ru/]фабрики женской одежды в россии[/url], но мы реализуем одежду по территории всей Украины и России.

Наши рабочие цеха оборудованы самым эффективным оборудованием известных мировых изготовителей – KANSAI, PEGASUS, [url=http://fabrika-mody.ru/collection/platya]платья красивые[/url], MAYER и JUKI. высококачественная одежда изготовленная компанией “Фабрика моды” популярна как на Украине, так и в странах бывшего СССР и Европы.

Опытные специалисты предприятия создают поистине шедевральные модели женской одежды. [url=http://fabrika-mody.ru/]одесса дом моды[/url]. Со всем выбором одежды, которую мы изготавливаем, вы можете ознакомиться у нас в каталоге товаров. Здесь детально описаны все модели и имеются качественные фотографии к ним. Любая модель из каталога одежды представлена в различных размерах, отдельно представлены новинки Фабрики моды и наиболее популярные модели. Если вам необходима будет помощь при подборе одежды, то наши менеджеры-консультанты по телефону, расположенному на вебсайте смогут вам быстро помочь.

Оформить заказ вы сможете у нас на сайте, а доставка одежды по Москве осуществляется курьером, по Российской Федерации – почтой России при условии 100% предоплаты.

2018-11-01 16:36:17
Zisyapes
Здравствуйте.

Накрутка просмотров
Этот показатель является одним из важнейших критериев оценки популярности блога. Он оказывает сильное влияние на величину заработка. Не важно, участвуете ли вы в партнерской программе или сотрудничаете с рекламодателями напрямую, это число всегда учитывается. Чем оно выше, тем дороже будет реклама. Высокий показатель придает каналу и материалам на нем солидность, повышает доверие. Число людей, посмотревших ролик, демонстрирует величину аудитории, которая увидит рекламу.
Так же более подробно можно глянуть тут

[url=http://forum.dddkursk.ru/index.php?act=ST&f=19&t=27186]накрутка дизлайков на youtube бесплатно[/url]
YouTube является одним из самых популярных web-ресурсов в мире, его аудитория превышает 1 миллиард человек. Ежедневно миллионы людей начинают свой день, просматривая ролики и попивая кофе, другие заходят на сайт во время перерыва на обед, кто-то заглядывает сюда, сидя в офисе.
Как Вам следующая информация:
<a href=http://vozmojnosti.org/idei-dlya-biznesa/kak-raskrutit-kanal-na-youtube.html>зачем раскручивать канал на YouTube</a>

2018-10-29 16:31:23
Zisyapes
Здравствуйте.

Помните, чем больше ссылок на свой ресурс вы оставите, тем больше будет отдача, а именно рост основных показателей.

Платные методы
Одними бесплатными методами вы либо не сможете раскрутить свой канал, либо потратите много времени. Если хотите увидеть быстрый результат, то воспользуйтесь платными способами раскрутки, которые можете заказать у нас.
Так же более подробно можно глянуть тут

[url=http://moryak.biz/forum/showthread.php?p=197138#post197138]http://moryak.biz/forum/showthread.php?p=197138#post197138[/url]

2018-10-26 20:33:10
Zisyapes
Как тут вставить фото к тексту? Хотелось бы заполнить тему актуальными фотографиями.

2018-10-09 21:37:42
Cvjncxo
Пройдите 1 регистрацию, сделайте 2 действия
и получайте от 8950 рублей каждые сутки в автоматическом режиме.

Мы гарантируем:
- Первый заработок в течении 60 минут.
- Стабильный доход 24 часа в сутки.
- Поступление денег без задержек.
- Для России, стран СНГ и Европы.
- Без вложений и установки ПО.
- Специально для новичков и людей без опыта.

Более подробная информация у нас на блоге: > https://prostowmr.blogspot.com/ <

2018-10-09 10:35:12
PerevodSr
Здравствуйте.

Кто-то пытается стать известным. К примеру, начинающие исполнители записывают свои выступления и выкладывают их, в надежде обрести поклонников. Компании рекламируют свои услуги, демонстрируют выполненные заказы, рассчитывая тем самым получить новых клиентов. К примеру, строители домов выкладывают готовую постройку, рассказывают об используемых материалах и объясняют особенности строительства. А некоторые снимают видео, чтобы получать деньги за просмотры и рекламу. Влогеры размещают рекламу в описании, делают вставки в сам ролик, получая за это оплату.
Так же более подробно можно глянуть тут
<a href=http://forum451.ipb.su/index.php?showtopic=21>http://forum451.ipb.su/index.php?showtopic=21</a>

2018-09-11 09:26:35
CharlesVes
Онкопрепараты

[url=https://apteka-onko.ru/product-category/effektivnye-sredstva-lecheniya-raka/]капрелса инструкция по применению[/url]
[url=https://apteka-onko.ru/product-category/effektivnye-sredstva-lecheniya-raka/]инлита отзывы пациентов[/url]
[url=https://apteka-onko.ru/product-category/effektivnye-sredstva-lecheniya-raka/]спрайсел sprycel дазатиниб[/url]


<a href=https://apteka-onko.ru/product-category/effektivnye-sredstva-lecheniya-raka/>ибрутиниб отзывы</a>
<a href=https://apteka-onko.ru/product-category/effektivnye-sredstva-lecheniya-raka/>стивагра купить</a>
<a href=https://apteka-onko.ru/product-category/effektivnye-sredstva-lecheniya-raka/>инлита инструкция по применению</a>
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Вы программируйте ради
денег
15% (31)
славы
4% (8)
удовольствия
33% (68)
знаний
20% (40)
просто так
5% (10)
все вместе
23% (47)

Проголосовало: 204
Майкрософт Ворд не понимает слово "стрипризерша", то есть подчеркивает красным, а когда кликаешь на него мышкой, то в возможных исправлениях он выдает "стриптиз ерша".
Рейтинг: 6/10 (1)
Посмотреть все анекдоты