Нужна помощь из области MFC (VC++)
пиши вопрос... можешь в приват...
В классе CListBox есть функция, которая на данный элемент списка ставит И подсветку И каретку. Есть функция, которая на данный элемент списка ставит ТОЛЬКО каретку. А мне нужна функция, которая ставит ТОЛЬКО подсветку. Есть ли такая вообще? Или как по другому добиться такого эффекта?
использовать одновременно
ЗЫ: список с несвязанным(множественным) выбором.
Вообще, каретка появляется, когда листбокс является активным (в фокусе). Можно в событии ON_LBN_SELCHANGE вставить следующую строчку : SetCurSel(-1). Тогда остается только одна каретка. Единственный артефакт, который здесь появляется - это то, что когда ты выделяшь какой-то элемент, то сначала он выделяется, а потом эта подсветка исчезает, но такое моргание заметно. Другой выход (более гемморойный) - это переписать отрисовку элементов.
Дак мне нужна подсветка без каретки, а не наоборот!
аа, тупанул... ща...
ну тогда при выделении ставь фокус на другой элемент. Каретка исчезнет.
Не уверен, что понял тебя правильно, но ща попробую. Можешь пока поподробнее написать?
в него вставляешь следующую строчку (даже фокус не надо никуда ставить): mylistbox.SetCaretIndex(-1)
Видишь там часть строк подсвечена серым? Вот как так сделать? Причем можно свободно выбирать любую строку, а подсветка не исчезает.
Надо ставить OWNER DRAW FIXED.
а поконкретней? что где поставить?
Ещё можно попробовать найти готовый компонент.
7-ю главу, Advanced Control Programming
Почему когда я ставлю флажок Owner Draw Fixed, прога не запускается? Что надо ещё обязательно сделать, когда ставишь этот флаг? Вроде надо переопределить функцию DrawItem. Но я это и сделал: protected: virtual void DrawItem(...); и её реализация. Не помогает. В чем ошибка?
Она не protected.
Хотя, это не важно. Что именно у тебя происходит? Покажи кусок кода, где ты определил функцию.
Кстати, какой Вижуал ты используешь? В 7-ом есть всё, что тебе надо.
Надо еще OnMeasureItem сделать.
Не обязательно, только если он хочет строки разного размера.
В функции DrawItem у меня строчек 7. Взял из одной документации, т.е. проблема не в них. Ведь по-моему даже если эту функцию пустой сделать, всё должно работать. А у меня даже с пустой не пашет. Нажимаю CTRL-F5 и сразу окошко: STOP, DEBUG, CANCEL.
ЗЫ: использую Microsoft Visual C++ 6.0. А где можно взять 7-ю? И чем она лучше?
ЗЫ. Ссылка, что я привел выше, все еще остается в действии. Там реально все подробно и доходчиво написано.
ЗЗЫ.Забей на 7-й vc++.
Ну дак ты хоть напиши, на какой строке у тебя валится?
Вот создал простой новый проект на основе диалога при помощи Wizard'a. Вставил в диалог ListBox. Добавил в него две строчки. Запускаем - всё пашет. Теперь меняем в Box'e менюшку Owner Draw на Fixed. И всё - не работает прога. Вот у меня примерно та же ситуация. Заставьте этот поект работать и скажите, как вы это сделали. И тогда я смогу свой проект поправить.
// Derived class is responsible for implementing these handlers
// for owner/self draw controls (except for the optional DeleteItem)
void CListBox::DrawItem(LPDRAWITEMSTRUCT)
{ ASSERT(FALSE); }
void CListBox::MeasureItem(LPMEASUREITEMSTRUCT)
{ ASSERT(FALSE); }
int CListBox::CompareItem(LPCOMPAREITEMSTRUCT)
{ ASSERT(FALSE); return 0; }
void CListBox::DeleteItem(LPDELETEITEMSTRUCT)
{ /* default to nothing */ }
int CListBox::VKeyToItem(UINT, UINT)
{ return Default; }
int CListBox::CharToItem(UINT, UINT)
{ return Default; }
Ну ты мне помог блин, просто зашибись. Ты хоть мой пост читал? Я же не спрашивал, с помощью каких ещё объектов это можно реализовать. У меня ListBox и точка. Я же попросил: "Заставьте ЭТОТ(!) проект работать и скажите, как вы это сделали." А ты мне какой-то левый суешь. А кнопка RETRY мне мало что говорит. Все равно в debug'e не понимаю в чем ошибка. Так что буду благодарен, если кто-нить заставит работать именно этот проект.
Батенька, дак вам тогда надо учиться на СИ++ программировать.
Оставить комментарий
Arina_Kulikova
Народ! Есть тут кто-нибудь кто ХОРОШО шарит в MFC? Конкретнее: нужна одна функция из класса CListBox. Кто-нибудь с ним вплотную работал? Если найдется знающий человек, тогда сформулирую вопрос.