我正在使用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/