![]() |
|
|
![]()
|
|
| OPQ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 31.7.2006 Репутация: нет Всего: нет |
Здравствуйте люди. Я новичок в MFC, поэтому не убивайте меня сильно, если вопрос покажется глупым
Есть диалог, 4 Radio Button и 2 Edit Box, надо чтобы при выборе первого Radio Button у первый Edit Box Disabled = false, а у второго Disabled = true, при выборе второго Radio Button - наоборот. А при выборе 3 и 4 Radio Button оба Edit Box были Disabled = true. Я это сделал вот так, но не уверен, что это хорошо, как можно сделать по-другому?
|
|||
|
||||
| Dart |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 26.6.2006 Где: Саратов, РФ Репутация: 2 Всего: 2 |
Вообще-то сделано нормально, только я бы в отдельную функцию это засунул.
А вообще-то для изменения стилей окна существует метод ModifyStyle для основных и ModifyStyleEx для дополнительных свойств. Почитай в MSDN о свойствах окна, и тебе станет все ясно. Удачи! --------------------
ЦитатаЛюблю смотреть, как другие работают Дж. К. ДжеромСайт: www.ecosigma.ruПочта: [email protected] |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
1) Лучше написать функцию, которая будет делать enable обоим полям в зависимости от текущего состояния радио-опции и вызывать ее из обоих обработчиков. Если все 4 радио-кнопки образуют группу (т.е. только одна из них может быть включена), то узнать, какая, можно одним вызовом GetCheckedRadioButon.
Написанная функция тебе также пригодится и при инициализации диалога (для предустановки параметров). Вообще, состояние полей лучше привязывать к состоянию переменных или других полей, а не к действиям пользователя. 2) Продвинутый вариант: заставить работать обработчики ON_UPDATE_COMMAND_UI для каждого поля, чье состояние нужно менять, как это делается для немодальной диалоговой панели. -------------------- ... |
|||
|
||||
| Dart |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 26.6.2006 Где: Саратов, РФ Репутация: 2 Всего: 2 |
Только без поллитра в этом новичку не разобраться. Так что лучше 1 вариант, как и советует Earnest. Просто когда у тебя будет реальный проект, большое количество функций неизбежно приведет к каше в твоей голове. --------------------
ЦитатаЛюблю смотреть, как другие работают Дж. К. ДжеромСайт: www.ecosigma.ruПочта: [email protected] |
|||
|
||||
| OPQ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 31.7.2006 Репутация: нет Всего: нет |
Earnest, а можно пример?
|
|||
|
||||
| Dart |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 26.6.2006 Где: Саратов, РФ Репутация: 2 Всего: 2 |
Что-то типа
Это сообщение отредактировал(а) Dart - 2.8.2006, 08:58 --------------------
ЦитатаЛюблю смотреть, как другие работают Дж. К. ДжеромСайт: www.ecosigma.ruПочта: [email protected] |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Насчет единой функции, я имела в виду немного другое:
И вызывать этот метод из всех OnBtnClicked. Больше там ничего делать не надо, так что можно поставить один обработчик на диапазон. Насчет асинхронного обновления: Ну, сам, может и не найдет, но если показать, то все просто. Чтобы работали обработчики ON_UPDATE, нужно добавить обработчик сообщения WM_KICKIDLE, а в нем вызывать UpdateDialogControls(). Сообщение определено в "afxpriv.h". Я уже писала об этом в форуме. В этом случае достаточно будет написать свой OnUpdate для каждого поля, а обработчики OnBtnClicked вообще не нужны. -------------------- ... |
|||
|
||||
| OPQ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 31.7.2006 Репутация: нет Всего: нет |
Спасибо! У меня ещё один вопрос
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
1) Можно переопределить PreTranslateMessage для диалога, в котором ловить нажатие ENTER и проверять, не в едите ли фокус, и тогда делать что тебе надо (и возвращать TRUE).
2) При нажатии ENTER генерируется команда от кнопки по-умолчанию. Выход происходит, т.к. по умолчанию DefaultButton = OK. Переставь с помощью SetDefID. Или в дизайнере диалогов поставь свойство Default у нужной кнопки, а не у OK. -------------------- ... |
|||
|
||||
| OPQ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 31.7.2006 Репутация: нет Всего: нет |
Как отловить нажатие ENTER я разобрался, а как отловить нажатие других клавиш, например '*' , '/' , '+' , '-'
И если можно еще пара вопросов. 1. Как на Radio Button поставить картинку из ресурсов типа BITMAP, в свойствах Appearance Bitmap ставлю true, а чта дальше делать не знаю 2. Как програмно изменить рисунок в Picture Control ? еще раз спасибо! |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
1) RadioButton - это просто CButton, у последнего есть функция SetBitmap.
2) PictureControl - это, кажется, CStatic. Есть аналогичная ф-я. -------------------- ... |
|||
|
||||
| Gremlin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 28.8.2006 Репутация: нет Всего: нет |
А вот мне помогите с этим Едитом! Хочу чтобы текст был выровнен по вертикали по центру!
Тоесть я изменил размеры всего поля и оно стало в два раза больше текста и нужно выравнивание! гы увеличения кегля не предлагать |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
так текст в едите можно крутить, а выравнивание вроде в свойствах можно указать |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
По-моему, в эдите вертикальное выравнивание не предусмотрено...
-------------------- ... |
|||
|
||||
| Gremlin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 28.8.2006 Репутация: нет Всего: нет |
блин я бы не спрашивал еслибы если бы было предусмотрено штатно но сделать надо
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |