Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2013, 10:55   #1
RocBoy-D
Пользователь
 
Регистрация: 10.03.2012
Сообщений: 10
По умолчанию Установка и снятие флажков в CheckBox

Здравствуйте! В программе имеется три дочерних окна - check box-ы. Нужно, чтобы флажок стоял только возле одного из них после нажатия на него, а у остальных удалялся.

Создание окон:
Код:
case WM_CREATE: hwndButton [3] = CreateWindow (L"button", L"Red", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, 20, 145, 80, 25, hwnd, (HMENU) 3, ((LPCREATESTRUCT) lParam) -> hInstance, NULL);
SendMessage (hwndButton [3], BM_SETCHECK, 1, 0);
hwndButton [4] = CreateWindow (L"button", L"Green", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, 20, 165, 80, 25, hwnd, (HMENU) 4, ((LPCREATESTRUCT) lParam) -> hInstance, NULL);
hwndButton [5] = CreateWindow (L"button", L"Blue", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, 20, 185, 80, 25, hwnd, (HMENU) 5, ((LPCREATESTRUCT) lParam) -> hInstance, NULL);
return 0;
Обработка клика:
Код:
case WM_COMMAND: switch (LOWORD (wParam)) 
{
case 3: SendMessage (hwndButton [3], BM_SETCHECK, 1, 0);
SendMessage (hwndButton [4], BM_SETCHECK, 0, 0);
SendMessage (hwndButton [5], BM_SETCHECK, 0, 0);
break;
case 4: SendMessage(hwndButton[3], BM_SETSTATE, 0, 0);
SendMessage (hwndButton [4], BM_SETCHECK, 1, 0);
SendMessage (hwndButton [5], BM_SETCHECK, 0, 0);
break;
case 5: SendMessage (hwndButton [3], BM_SETCHECK, 0, 0);
SendMessage (hwndButton [4], BM_SETCHECK, 0, 0);
break;
}
return 0;
Но флажки сами по себе не исчезают, только после повторного клика. Подскажите, в чем ошибка? Спасибо!

Получается check box должен работать как radio button (активен только один из трех в данный момент времени). Пробовал и BM_SETSTATE использовать, тоже не так работает... В чем же дело?
RocBoy-D вне форума Ответить с цитированием
Старый 09.05.2013, 11:23   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а почему сам радиобаттон не применить то?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.05.2013, 12:08   #3
RocBoy-D
Пользователь
 
Регистрация: 10.03.2012
Сообщений: 10
По умолчанию

Пепел Феникса, по заданию нужно использовать именно check box
RocBoy-D вне форума Ответить с цитированием
Старый 09.05.2013, 12:38   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

1. У Вас в ветке 5 все только сбрасывается и ничего не устанавливается.
2. Перед тем, как что-то делать с флажком, нужно знать его состояние. Для этого либо продублировать его состояние во внутренних переменных программы, либо опрашивать его состояние у системы. Ни того, ни другого в программе нет.
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как выполнить функцию в случае нажатия на CheckBox, если данный CheckBox был добавлен через код? PAMAC Microsoft Office Excel 7 21.02.2013 15:33
Снятие блокировки регистров. ТриСемёрки Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 04.10.2010 14:06