Windows CE — отключить подсветку CComboBox

Я использую Visual Studio 2008 для написания приложения для Windows CE 6 с использованием C ++ и MFC.

Я хочу удалить синюю подсветку производного класса CComboBox, когда я выбрал элемент.
В соответствии с эта статья MSDN, Я не могу установить стиль поля со списком LBS_OWNERDRAWFIXED или CBS_OWNERDRAWFIXED, чтобы выбрать цвет выделения в моей функции DrawItem.

Я попытался использовать сообщение CBN_SELCHANGE, чтобы отправить сообщение WM_KILLFOCUS. Это частично работает: элемент управления теряет фокус (выделенный элемент больше не синий), но если я снова нажму на поле со списком, он не отображает список элементов.

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

Как я могу удалить синюю подсветку поля со списком?

Изменить: выпадающий список доступен только для чтения (флаг CBS_DROPDOWNLIST)

1

Решение

Я нашел (грязный) workaroud, на случай, если никто не даст лучший подход:

Я устанавливаю родителя, когда создаю комбинированный список:

customCombo.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP | CBS_DROPDOWNLIST | CBS_DROPDOWN, CRect(0, 0, 0, 0), **PARENT**, COMBO_ID);

Следующие строки дают фокус родительскому элементу, когда я закончу использовать поле со списком.

В заголовочном файле подкласса CComboBox:

public:
afx_msg void OnCbnSelchange();
afx_msg void OnCbnSelendcancel();
afx_msg void OnCbnSelendok();

В исходном файле:

void CustomCombo::OnCbnSelchange() {
//give focus to parent
CWnd* cwnd = GetParent();
if (cwnd != NULL) {
cwnd->SetFocus();
}
}void CustomCombo::OnCbnSelendcancel() {
//give focus to parent
CWnd* cwnd = GetParent();
if (cwnd != NULL) {
cwnd->SetFocus();
}
}

void CustomCombo::OnCbnSelendok() {
//give focus to parent
CWnd* cwnd = GetParent();
if (cwnd != NULL) {
cwnd->SetFocus();
}
}
0

Другие решения

В вашем заголовке:

public:
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

и в cpp:

void CYourComboBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your code to draw the specified item
CDC* pDC = CDC::FromHandle (lpDrawItemStruct->hDC);

if (((LONG)(lpDrawItemStruct->itemID) >= 0) &&
(lpDrawItemStruct->itemAction & (ODA_DRAWENTIRE | ODA_SELECT)))
{
// color item as you wish
}

if ((lpDrawItemStruct->itemAction & ODA_FOCUS) != 0)
pDC->DrawFocusRect(&lpDrawItemStruct->rcItem);

}

модель взята отсюда:

Расширенный выпадающий список

-1