我正在使用Visual Studio 2008使用C ++和MFC为Windows CE 6编写应用程序。

选择元素后,我想删除CComboBox派生类的蓝色突出显示。
根据this MSDN article,我无法将组合框的样式设置为LBS_OWNERDRAWFIXED或CBS_OWNERDRAWFIXED来在DrawItem函数上选择选择的颜色。

我尝试使用消息CBN_SELCHANGE发送WM_KILLFOCUS消息。它部分起作用:该控件失去了焦点(所选元素不再是蓝色),但是如果再次单击组合框,它将不会显示元素列表。

我读过我可以使用paint事件设置突出显示的颜色,但是我不知道或找不到如何执行此操作。

如何删除组合框的蓝色突出显示?

编辑:组合框是只读的(标志CBS_DROPDOWNLIST)

最佳答案

我发现了一个(肮脏的)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();
    }
}

关于c++ - Windows CE-禁用CComboBox高亮,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44567380/

10-13 05:09