| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Узнать что hwnd на самом деле CEdit |
| Автор: 17dufa 25.11.2009, 17:17 | ||||
| Добрый день. По определенному условию мне нужно все контролы на окне задисаблить, кроме кнопки выхода. делаю так:
Все работает, но для CEdit хотелось бы не Enable(FALSE), а SetReadOnly(TRUE). Соответственно в функции DisableWindow надо как-то различить чем же на самом деле является hwnd. попробовал так:
не работает. То есть static_cast<CEdit*>(pWnd)->SetReadOnly(TRUE); вызывается, но edit все равно в результате оказываются Disable. |
| Автор: Andrey44 25.11.2009, 21:50 | ||
Попробуй так. МФЦ не надежная штука! |
| Автор: Andrey44 25.11.2009, 22:05 | ||
|
| Автор: 17dufa 26.11.2009, 12:20 |
| Andrey44, стреляет. спасибо. а можно что-нить подобное сделать с комбобоксами? чтоб стрелочка вниз была задисайблена, а текст выглядел как у ReadOnly едита? и еще один вопрос, GroupBox притворяется Button'ом, как его разоблачить? дисайблить групбоксы и статики тож некошерно. |
| Автор: 17dufa 26.11.2009, 13:14 |
| Andrey44, не получается, hcombo и hedit но нулям. интереснее вопрос с групбоксом. почему он в качестве класса указывает Button и как его отличить от реального Button. |
| Автор: Andrey44 26.11.2009, 13:24 | ||||
Да, посмотрел, это только для ComboBoxEx32 Добавлено через 5 минут и 47 секунд
По стилям, у гроупбокса стиль
Добавлено через 7 минут и 12 секунд Таким образом получаем стили кнопки GetWindowLong(...............) проверяем стоит ли такой стиль и действуем соответственно |
| Автор: 17dufa 26.11.2009, 13:53 |
| нашел вот такую функцию: GetComboBoxInfo но и она возвращает HWND едита нулевым, хотя HWND самого комбо и списка достаточно осмысленные возвращает. Так как перехитрить GroupBox? |
| Автор: Earnest 27.11.2009, 15:32 | ||
Причем тут MFC, если человек глупость делает... Проверить стиль. Групбокс - это действительно кнопка, но со стилем BS_GROUPBOX. Кроме того, тип поля лучше узнавать, посылая полю WM_GETDLGCODE. Поскольку стоит только сделать на основе стандартного эдита свой класс, с небольшими добавками, так сразу твой код проверки класса работать не будет. Эта тема уже обсуждалась где-то в АПИ-форуме, поищи. Добавлено через 1 минуту и 50 секунд
Не у всякого комбобокса есть эдит, а только у DROPDOWN. Кроме прочего, едит проще достать и как первого чайлда комбобокса (GetWindow), ибо ф-я GetComboBoxInfo не на всех виндоусах работает. |
| Автор: 17dufa 1.12.2009, 13:33 |
| Earnest, да, мои комбо DROPLIST. и наскока я понял рантайм поменять стиль комбо - это надо комбо пересоздать. пусть будут Disable. с WM_GETDLGCODE не до конца понятно. в мсдн есть DLGC_BUTTON, DLGC_STATIC, а вот для едита какой будет код возврата? DLGC_WANTALLKEYS? а я едит ни с кем не перепутаю в таком подходе? еще у мя MaskEdit используется. я его сейчас так отлавливаю: !strcmp(className, _T("MSMaskWnd")). Если на WM_GETDLGCODE перейти, то как MaskEdit отловить? |
| Автор: Earnest 1.12.2009, 20:20 |
| Для определения эдита лучше использовать код DLGC_HASSETSEL; WANTKEYS действительно многие могут использовать, а HASSETSEL означает, что контрол принимает сообщение EM_SETSEL. Т.е. это Edit, RichEdit и все их производные. |