Есть комбобокс IDC_COMBO1, ему соответствует переменная m_IDC_COMBO1 типа CComboBox.
В этом комбобоксе расположены три элемента-строки--"строка 1", "строка 2", "строка 3".
Комбобокс нормально работает, нет проблем с выбором элемента и с программной обработкой выбора элемента.
Но есть одна проблема: пользователь может подвести курсор мыши на текст в элементе комбобокса и изменить строку, изменить текст в этом элементе комбобокса.
Как сделать так, чтобы выбор элемента комбобокса и обьраьотка этого выбора работали, но чтобы было нельзя изменить текст у элементов комбобокса? Функции SetReadOnly я у комбобокса не нашёл.
1613 г. = 2024 г.
Re: Как сделать SetReadOnly(TRUE) для компонентов комбобокса?
Здравствуйте, RussianFellow, Вы писали:
RF>Но есть одна проблема: пользователь может подвести курсор мыши на текст в элементе комбобокса и изменить строку, изменить текст в этом элементе комбобокса. RF>Как сделать так, чтобы выбор элемента комбобокса и обьраьотка этого выбора работали, но чтобы было нельзя изменить текст у элементов комбобокса? Функции SetReadOnly я у комбобокса не нашёл.
Комбобоксу надо поставить стиль "drop list" в ресурсах
Re[2]: Как сделать SetReadOnly(TRUE) для компонентов комбобокса?
Здравствуйте, SаNNy, Вы писали:
SNN>Здравствуйте, RussianFellow, Вы писали:
RF>>Но есть одна проблема: пользователь может подвести курсор мыши на текст в элементе комбобокса и изменить строку, изменить текст в этом элементе комбобокса. RF>>Как сделать так, чтобы выбор элемента комбобокса и обьраьотка этого выбора работали, но чтобы было нельзя изменить текст у элементов комбобокса? Функции SetReadOnly я у комбобокса не нашёл.
SNN>Комбобоксу надо поставить стиль "drop list" в ресурсах
А как по-русски это называется? Выпадающий список? У меня стоит русская Visual C++ 2008, так там у комбобокса нет такой опции.
1613 г. = 2024 г.
Re[3]: Как сделать SetReadOnly(TRUE) для компонентов комбобокса?
Здравствуйте, RussianFellow, Вы писали:
RF>А как по-русски это называется? Выпадающий список? У меня стоит русская Visual C++ 2008, так там у комбобокса нет такой опции.
В моей студии называется — "раскрывающийся список"
Re[4]: Как сделать SetReadOnly(TRUE) для компонентов комбобокса?
Здравствуйте, Evgeniy Skvortsov, Вы писали:
ES>Здравствуйте, RussianFellow, Вы писали:
RF>>А как по-русски это называется? Выпадающий список? У меня стоит русская Visual C++ 2008, так там у комбобокса нет такой опции.
ES>В моей студии называется — "раскрывающийся список"
Спасибо, так и сделал.
Но у меня теперь комбобокс стал серым цветом. Я же хотел бы, чтобы комбобокс стал белым цветом. Можно ли так сделать (изменить цвет фона комбобокса) и если да, то как?
1613 г. = 2024 г.
Re[5]: Как сделать SetReadOnly(TRUE) для компонентов комбобокса?
Здравствуйте, RussianFellow, Вы писали:
RF>Спасибо, так и сделал. RF>Но у меня теперь комбобокс стал серым цветом. Я же хотел бы, чтобы комбобокс стал белым цветом. Можно ли так сделать (изменить цвет фона комбобокса) и если да, то как?
У меня ничего не изменилось.
Можно обрабатывать сообщение WM_CTLCOLOR, в обработчике написать что-то вроде:
if (pWnd->GetDlgCtrlID() == IDC_COMBO1) {
pDC->SetBkColor(RGB(250, 0, 0)); // меняем цвет фона на красный :-)
}
Если хочешь как-то более кардинально изменить внешний вид — рисуй его сам, ставь ему в свойствах стиль OWNERDRAW и раскрашивай как хочешь.
Вернее придется создать класс-наследник от CComboBox и в нем переопределить OnDrawItem. Кажется так, если ничего не забыл.
Re[6]: Как сделать SetReadOnly(TRUE) для компонентов комбобокса?
Здравствуйте, RussianFellow, Вы писали:
RF>А в какой функции писать это? У меня MFC-ное приложение, а не WinAPI-шное.
Какая разница, WM_CTLCOLOR он что в WINAPI, что в MFC одинаков.
В редакторе ресурсов правый клик мышью на диалоге — мастер классов. Выбираешь закладку "Сообщения", находишь в списке WM_CTLCOLOR — двойной клик на нем, добавится обработчик с именем OnCtlColor, в нем и пишешь.
Я же уже объяснял как в MFC добавлять обработчик события.