как это сделать в vc.net (или vc6)

pulmo

есть диалог, соответственно его класс, на диалоге - Check Box, Edit Control. соответственно веременные типа bool и int. Можно ли и если можно то как сделать следующую вешь: при выбраном check box'e Edit Control должен быть не активен (read only а когда выбираешь - активен.

JERRY

Если ты про WinForms, то у всех контролов есть проперти Enabled. В MFC по идее тоже такая штука должна быть, но точно не скажу.

pulmo

вот я бы и хотел знать как это в mfc сделать

LionTG

Тебе надо плучить указатель на CWnd(либо сразу связываешь с контролом, переменною управляющего типа, либо по идентификатору ресурса а у него туева хуча методов. EnableWindow(TRUE) например.

pulmo

а по конкретнее ни кто не знает? я-то понимаю что нужно получить какой-то хендлер и у него куча методов. О ТемноСерый приди на помощь ты мня всегда выручал в подобные минуты...

Dasar

Это ты мне?
зы
А жертвы уже принес? ритуальные пляски сплясал?

pulmo

да, тебе, ритульные жесты, слова и тому подобное в этих случаях я испускаю в достатке

Dasar

В данном случае, лучше вставить CEdit не как int, а как СEdit.
Тогда вешаешься на изменение CheckBox-а, и дергаешь EnableWindow(TRUE/FALSE) у CEdit-а. int из CEdit можно будет получить через atoi(edit.GetWindowText;
зы
Если хочется по тем или иным причинам оставить CEdit, как int, то придется получать едит через this.GetDlgItem(ID_YourEdit а далее опять же edit->EnableWindow(TRUE/FALSE)

pulmo

Большое спасибо, примерно так оно и должно выглядеть.
По ходу возник следующий вопрос: а как сотояние checkbox'a узнать внутри класса? через переменную не получается, т.к. она обновляется только при зактытии окна.
т.е. я делаю так:
CWnd* id2 = GetDlgItem(IDC_CHECK1);
а, что потом?

LionTG

Напиши функцию UpdateDate(FALSE) или TRUE не помню. Она обнавляет значения переменны.

pulmo

хотелось бы без нее обойтись

LionTG

У тебя какая переменная связана в Check. Bool или CButton?
Если CButton, то есть функция GetState если bool то без Update ты не обойдешься.

pulmo

bool, я сделал уже через доп. переменную, которая выставляется вначале, а потом меняется при нажатии на checkbox, работает, только это не шибко красиво, хотелось бы узнавать текущее состояние checkbox'a без помощи каких либо переменных (ну разве что CWnd*)

LionTG

А чем тебе UpdateDate не понравилась?
Попробуя так
CButton *butCheck;
bool bCheck;
butCheсk = (CButton*)GetDlgItem(IDC_CHECK1);
bCheck = butCheck->GetState&0x0003;
По идеи, то что тебе нужно.

pulmo

error C2228: left of '.GetState' must have class/struct/union type

LionTG

Я описался в пред. посте вместо . надо ->. Теперь проверь. Должно всё работать.

pulmo

да, теперь работает именно так как я хотел, именно теми средствами что нужно. Кстати че это за ворнинг тупой?
warning C4800: 'UINT' : forcing value to bool 'true' or 'false' (performance warning)
строка была такая:
bool bCheck;
UINT result;
bCheck = bool(result);
вроде бы явное преобразование...

Dasar

Потому, что ты явно пытаешь сделать из int-а bool, а в общем случае это неправильно

ppplva

Пиши что-нибудь типа static_cast<bool>

pulmo

а почему не правильно? я всегда свято верил, что == 0 это false, != 0 - true, как тут еще можно преобразовать? и вообще, раз я это явно делаю нечего мне эти ворнинги показывать, где блин гибкость и возлагание подобных решений на программиста, или есть примеры того что подобная конструкция откомпилированная в vs.net будет работать не так как я думаю?

Dasar

Вот смотри что может получится. Для примера на данной системе пусть bool будет 1 байт, а int - 4, тогда если значение в int был например 1024 , как бы true, после вот такого преобразования (bool)1024 в bool попадет 0, т.е. false. так как преобразование просто отрезает старшие биты.
зы
по хорошему из int-а в bool надо преобразовывать так: bool b = i != 0;

pulmo

>Для примера на данной системе пусть bool будет 1 байт, а int - 4, тогда если значение в int был например 1024 , как бы true, после вот такого преобразования (bool)1024 в bool попадет 0, т.е. false. так как преобразование просто отрезает старшие биты.
1 байт == 1 бит? все равно не понял почему 0 попадет, если там все единицы были
>по хорошему из int-а в bool надо преобразовывать так: bool b = i != 0;
да, примерно таким способом я и избавился от ворнинга

Dasar

а кто тебе обещал, что в int-е все биты будут установлены в единицу?
Оставить комментарий
Имя или ник:
Комментарий: