VC++ как сделать недоступными элементы диалога?

stm8680568

есть 3 элемента - галочка и 2 радиобаттона. нужно, чтобы при установке галочки баттоны делались недоступными. как?

okunek

EnableWindow(0)

stm8680568

то есть напрямую IDC_RADIO_BUTTON.EnableWindow(0);?

okunek

IDC_RADIO_BUTTON - вообще-то число
GetDlgItem(IDC_RADIO_BUTTON) выдаст тебе указатель на кнопку

igor1930


// это кнопарь в объявлении класса
CButton *bplay;
// это в ::InitDialog
bplay = (CButton *)GetDlgItem(IDC_PLAY);
// а это гасим кнопку, где хотим
this->bplay->EnableWindow(FALSE);

stm8680568

а какая функция отвечает за текущее состояние окна? то есть oninitdialog начинает все и расставляет, допустим, значения. а какой функцией проверяется текущее состояние значений?

maggi14

Можно проще:
HWND hw = GetDlgItem(IDC_RADIO_BUTTON);
EnableWindow(hw, 0);

igor1930


this->bplay->IsWindowEnabled;

maggi14

Самый простой (с кучей недостатков, но, обычно, удовлетворительный) способ заключается в UpdateData

igor1930

В программе, чуть большей, чем самый примитивный диалог, все же стоит, по моему скромному мнению, ввести переменные-члены класса.

stm8680568

спасибо за обстоятельный ответ.

karkar

А в чем великий сакральный смысл "this->" ?

igor1930

1) В том, что так удобнее писать, ибо в VC есть автодополнение.
2) Хороший тон обращаться к членам/медодам класса через this->, т.к. это в дальнейшем облегчает читабельность кода и отличает члены/методы от локальных переменных и глобальных функций.

kokoc88

Автодополнение, как ты выразился, прекрасно работает и без this. А хорошим тоном является не обращение к членам класса через this, а использование префикса "m_" в именах.

igor1930

Автодополнение работает без this-> частично. Набрав this->, мы получаем выпадающий список членов/методов класса, что позволяет нам не лезть в определение, чтобы уточнить имя. Что же касается m_, то помимо того, что нам предлагает Билл Гейтс через GUI VC, есть еще и стандарты, в которых про m_ ничего не сказано.

okunek

в стандарте про выпадающие списочки тоже ничего не сказано

igor1930

Смейся сколько угодно. Здесь в качестве замены this настоятельно рекомендовали использовать m_, не в пример которому this (надеюсь, ты не будешь с этим спорить) - вполне стандартная штука.

okunek

>Здесь в качестве замены this настоятельно рекомендовали использовать m_,
точно также как ты рекомендовал использовать "this->".
имхо: бесполезно спорить что лучше. я вообще не юзаю ни this-> ни m_ и проч без надобности, нормально помню весь код который настрочил или названия функций и переменных mfc и winapi, которые юзаю

Marinavo_0507

> есть еще и стандарты, в которых про m_ ничего не сказано
сказано

igor1930

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

igor1930

Ссылку дай почитать, хочу стать умным.

okunek

к счастью нет

Marinavo_0507

Ссылка на стандарт C++ есть в FAQ.
Там написано про то, какими должны быть идентификаторы-названия членов класса.
Идентификаторы, начинающиеся с m_, вполне стандартны.

maggi14

+1
не писать m_ - имхо дурной тон

evgen5555

От нотации зависит.

maggi14

Ессно. Я привык к венгерской. Для меня было некоторым маленьким шоком, когда я перешел на Яву и узнал, что там так не принято.

Dasar

> Идентификаторы, начинающиеся с m_, вполне стандартны.
В стандарте, прямо так и написано, что если члены классов называть с m_, то это будет стандартное решение, а все остальные названия - нет?

Marinavo_0507

С чего ты взял, что стандартное решение должно быть единственным?

Dasar

> С чего ты взял, что стандартное решение должно быть единственным?
1. предположил
2. но меня больше интересует ответ на первую половину вопроса.

Marinavo_0507

Ну я думаю, что нет.

maggi14

2. Насколько я слышал, в Майкрософте - да, это внутренний стандарт.

stm8680568

а теперь тот же самый вопрос, но только баттоны сделать невидимыми. как?

Dasar

> 2. Насколько я слышал, в Майкрософте - да, это внутренний стандарт.
Венгерская нотация - уже лет 5 даже в Микрософте, как не стандарт.

bastii

Венгерская нотация - уже лет 5 даже в Микрософте, как не стандарт.
И когда на С++ под вин апи пишут?

maggi14

Ботай МСДН
BOOL ShowWindow(HWND hWnd, int nCmdShow);

bleyman

Вчера писал на плюсах, использовал шарповую стандртную нотацию, прекрасно получилось.

Dasar

> И когда на С++ под вин апи пишут?
AFAIK, microsoft сейчас на C++ относительно мало пишет.

stm8680568

спасибо за ответ! рад бы поботать, да нету! ни места на винте, ни самих дисков. и живу не общаге

bastii

Не верю. Очень мало проектов еще на дотНет. Только последние. А так у них порядки в разных группах свои. В программировании на С++ не так уж и много изменилось, зачем менять нотацию. На Шарпе, понятно, своя нотация. Бред Адамс из CLR группы даже постил у себя в блоге.

bleyman

Ну-ну.
Это на плюсах всю жизнь проектов было очень мало.
Вначале их делал ВБ, потом добавилась жава, а счаз по ощущениям шарп оторвал почти половину всего, если не больше.
Я просто как бы смотрю на прекрасный блог The Daily WTF, так вот, там шарпа столько же, сколько ВБ (по ощущениям). И это при том, что полноценный WTF на шарпе не очень-то и легко сгенерить =)
Оставить комментарий
Имя или ник:
Комментарий: