Четверг, 03.07.2025, 03:21
Приветствую Вас Гость

Soft by Warik

NEMO_CHAT
Категории раздела
Анекдот
Случайный анекдот:

Наши часики
Опрос
Оцените наш cайт по пятибальной системе
Всего ответов: 34
Статистика
Rambler's Top100




Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » Статьи » Win API [ Добавить статью ]

Создание RadioButton средствами Win API

Сегодня поговорим о том, как работать с RadioButton. RadioButton представляют собой кнопки, автоматически объеденяемые в группы. В каждой группе, одновременно может быть включена только одна кнопка. Главное отличие этих кнопок от CheckBox'ов в том, что если повторно щелкнуть на радио-кнопке, то ее состояние не изменится.

Кнопки RadioButton могут быть двух стилей - BS_AUTORADIOBUTTON и BS_RADIOBUTTON. Как и в случае с CheckBox'ами, стиль BS_AUTORADIOBUTTON означает, что Windows сама будет менять состояние кнопки (включена/выключена). А если у кнопки стиль BS_RADIOBUTTON, то состояние кнопки устанавливает программист.

Code
const
  IDRBtn1 = 1;
  IDRBtn2 = 2;
  IDRBtn3 = 3;

var
  RBtn1: HWND;
  RBtn2: HWND;
  RBtn3: HWND;
  Static1: HWND;
  Static2: HWND;
  Static3: HWND;

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

Code
RBtn1 := CreateWindowEx( 0, 'Button', 'Опция 1',
  WS_CHILD or WS_VISIBLE or BS_AUTORADIOBUTTON,
  20, 15, 80, 20, Wnd, IDRBtn1, hInstance, nil );
SendMessage( RBtn1, WM_SETFONT, GetStockObject( ANSI_VAR_FONT ), 0 );

RBtn2 := CreateWindowEx( 0, 'Button', 'Опция 2',
  WS_CHILD or WS_VISIBLE or BS_AUTORADIOBUTTON,
  110, 15, 80, 20, Wnd, IDRBtn2, hInstance, nil );
SendMessage( RBtn2, WM_SETFONT, GetStockObject( ANSI_VAR_FONT ), 0 );

RBtn3 := CreateWindowEx( 0, 'Button', 'Опция 3',
  WS_CHILD or WS_VISIBLE or BS_AUTORADIOBUTTON,
  200, 15, 80, 20, Wnd, IDRBtn3, hInstance, nil );
SendMessage( RBtn3, WM_SETFONT, GetStockObject( ANSI_VAR_FONT ), 0 );

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

Code
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: begin
  case LoWord( wParam ) of
  IDRBtn1: begin
  SetWindowText( Static1, 'Включена' );
  SetWindowText( Static2, 'Выключена' );
  SetWindowText( Static3, 'Выключена' );
  end;
  IDRBtn2: begin
  SetWindowText( Static1, 'Выключена' );
  SetWindowText( Static2, 'Включена' );
  SetWindowText( Static3, 'Выключена' );
  end;
  IDRBtn3: begin
  SetWindowText( Static1, 'Выключена' );
  SetWindowText( Static2, 'Выключена' );
  SetWindowText( Static3, 'Включена' );
  end;
  end;
  end;
  else
  Result := DefWindowProc( Wnd, Msg, wParam, lParam );
  end;
end;

И в заключении сделаем следующее. Когда форма отобразится на экране, одна из радио-кнопок должна быть включена (например первая). Для этого ей надо послать сообщение BM_CLICK.

Code
// Показываем окно
ShowWindow( Wnd, SW_SHOWNORMAL );

SendMessage( RBtn1, BM_CLICK, 0, 0 );

В следующий раз мы посмотрим, как работать с несколькими гркппами радио-кнопок. А на сегодня все. Удачи в программировании.

Источник: http://nemo-chat.3dn.ru

Категория: Win API | Добавил: Warik (23.02.2010)
Просмотров: 477 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Мини-профиль

Гость !



Гость, мы рады вас видеть. Пожалуйста зарегистрируйтесь или авторизуйтесь!
Друзья сайта