![]() |
|
|
![]()
|
|
| Hawkmoth |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 22.10.2006 Репутация: нет Всего: 1 |
Такой нубский вопрос. В диалоге есть две радиокнопки, Radio1 и Radio2. После выбора одной из них пользователь жмет на кнопку "Ок", и должно выполняться действие, соответствующее выбранной радиобаттон. Для простоты, пусть вылазят сообщения "Нажата радиокнопка 1" и "Нажата радиокнопка 2", соответственно.
Ход моей мысли такой: создаем собственно диалог, добавляем 2 радиокнопки -> для первой ставим галочку на "Group" -> присваиваем член-переменную m_Radio. В OnInitDialog() прописываю
Затем в обработчике событий при нажатии на кнопку "Ок" прописываю
И теперь при тестировании получившегося приложения независимо от положения кнопок, выдается сообщение "Нажата радиокнопка 1". Как поправить? |
||||
|
|||||
| BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: нет Всего: 10 |
CButton::GetState?
-------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Если m_Radio - это переменная, связанная с радиокнопками, и в DoDataExchange есть соответствующее предложение DDX_Radio и кнопки правильно расположены (подряд, на второй кнопке нет WS_GROUP) и т.д. - то добавть перед swith'ем UpdateData (TRUE).
Добавлено через 1 минуту и 35 секунд Кстати, в OnInitDialog не нужно вызывать UpdateData (FALSE) - это будет уже второй раз. Достаточно вызвать базовый метод OnInitDialog, а перед ним (или в конструкторе) сделать необходимые присваивания. -------------------- ... |
|||
|
||||
| Hawkmoth |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 22.10.2006 Репутация: нет Всего: 1 |
Earnest, спасибо! Именно этого, по-видимому, и не хватало
BorisVorontsov, возможно, более логичный вариант... Я еще деревянный, и синтаксис с ходу мне плохо дается... Что-то вроде этого:
Или совсем вру? Это сообщение отредактировал(а) Hawkmoth - 24.5.2010, 20:35 |
||||||
|
|||||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Можно и так, только тогда удобнее через диалог спрашивать: IsDlgButtonChecked (IDC_MYBUTTON) - чтобы каждую кнопку не извлекать.
-------------------- ... |
|||
|
||||
| Albor |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
Это метод CWnd. Возвращает ID выбранной радиокнопки в группе от nIDFirstButton до nIDLastButton. Использовать можно примерно так:
Добавлено через 4 минуты и 54 секунды Заодно - установить радиокнопку:
|
||||||
|
|||||||
| Hawkmoth |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 22.10.2006 Репутация: нет Всего: 1 |
Спасибо, с этим вопросом я более-менее разобрался)). Тогда еще вопрос вдогонку: как изначально неактивную группу радиокнопок (у каждой в свойствах проставлено "Disabled" сделать активной программно? Т. е. есть, допустим, диалог с группой из трех "серых" радиокнопок и кнопка, при нажатии на которую эти контролы активизируются. Конструкция
Не работает, ругается на left of '.EnableWindow' must have class/struct/union type (m_Radio - переменная, присвоенная через CW первой радиокнопке в группе). |
|||
|
||||
| Hawkmoth |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 22.10.2006 Репутация: нет Всего: 1 |
Так, в своём частном случае разобрался. Вот в таком виде желаемый эффект достигнут:
void CPage_1::OnButton1() { GetDlgItem(IDC_RADIO1)->EnableWindow(TRUE); GetDlgItem(IDC_RADIO2)->EnableWindow(TRUE); } А если у меня не две кнопки в радиогруппе, а 1000? |
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
Примерно так:
Данный код переберёт все окна от IDC_RADIO1 до IDC_RADIO1000 и выполнит над ними операцию EnableWindow. Необязательно, чтобы все окна были радиокнопками. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |