Для демонстрации техники работы с переключателями мы подготовили исходные тексты приложения CHECK. В своем главном окне (8.3) это приложение создает кнопку и два переключателя. Первый из этих переключателей обычный, а второй - автоматический.
8.3. Главное окно приложения CHECK
При помощи мыши вы можете изменять состояние переключателей с номерами 2 и 3 (первый номер присвоен кнопке с надписью "Переключатели"). Второй переключатель - автоматический и имеет стиль BS_AUTOCHECKBOX, третий - обычный со стилем BS_CHECKBOX.
Если после установки состояния переключателей нажать кнопку, расположенную в нижней части окна приложения, на экране появится диалоговая панель, отображающая текущее состояние переключателей. Эта панель показана на 8.2.
Исходные тексты приложения CHECK приведены в листинге 8.5.
Листинг 8.5. Файл check\check.c
// ================================================= // Определения // =================================================
// Изменяем размер и расположение органов // управления case WM_SIZE : { WinSetWindowPos (hWndButton1, HWND_TOP , 10, 10, 200, 50, SWP _SIZE | SWP_MOVE | SWP_ZORDER );
case WM_PAINT : { // Получаем пространство отображения hps = WinBeginPaint (hWnd, NULLHANDLE, &rec);
// Закрашиваем область, требующую обновление WinFillRect (hps, &rec, CLR_WHITE);
// Возвращаем пространство отображения WinEndPaint (hps); return 0; }
case WM_ERASEBACKGROUND : return(MRFROMLONG(1L));
// Это сообщение приходит при изменении // состояния переключателей case WM_CONTROL : { switch (SHORT1FROMMP (mp1)) { // Если сообщение пришло от автоматического // переключателя, получаем и сохраняем его // текущее состояние case BTN2_ID: { fButton2Checked = (BOOL) WinSendMsg (hWndButton2, BM_QUERYCHECK, MPFROMSHORT(0), NULL); break; }
// Если сообщение пришло от обычного // переключателя, изменяем его состояние // и сохраняем новое состояние // в переменной fButton3Checked case BTN3_ID: { if(fButton3Checked) WinSendMsg (hWndButton3, BM_SETCHECK, MPFROMSHORT(0), NULL);