Professional UI Solutions
Site Map   /  Register


Please Log In to post a new message or reply to an existing one. If you are not registered, please register.

NOTE: Some forums may be read-only if you are not currently subscribed to our technical support services.

Forums » Prof-UIS General Discussion » Changing background color of CExtComboBox Collapse All
Subject Author Date
Cyndi Chatman Nov 13, 2007 - 3:37 PM

I am using version 2.62. In the call to OnSetFocus() for a CExtComboBox, I am calling SetBkColor to set the background color of the combo box. It does not appear to have any affect, it remains white. I am making the same function call (SetBkColor) on CExtEdit controls and it is working. Is this not supported for CExtComboBox?

Technical Support Nov 16, 2007 - 12:12 PM

The CExtComboBox class has a built-in auto complete feature which is turned on by default (the m_bEnableAutoComplete property). So you may want not to use your class.

Cyndi Chatman Nov 15, 2007 - 12:29 PM

Thanks. I have upgraded to version 2.81 and that fixed the problem. Now I have another small problem. I have a custom combo box class named CAutoCompleteComboBox. The class overrides the CBN_EDITUPDATE handler; that is


While the user is typing, this handler finds the first string that starts with the characters the user has typed so far. I changed my CAutoCompleteComboBox from a standard CComboBox to a CExtComboBox and the functionality stopped working. Is CExtComboBox overriding this as well? My question is: how can I get the windows style of the CExtComboBox (as far as how it looks and the ability to set the back ground color), without overriding my handlers?

Here is a copy of my source.

Header file:

#if !defined(AFX_COMBOBOXEX_H__115F422E_5CD5_11D1_ABBA_00A0243D1382__INCLUDED_)
#define AFX_COMBOBOXEX_H__115F422E_5CD5_11D1_ABBA_00A0243D1382__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

// ComboBoxEx.h : header file

// CAutoCompleteComboBox window

class CAutoCompleteComboBox : public CExtComboBox
// Construction

// Attributes

// Operations

// Overrides
    // ClassWizard generated virtual function overrides
    virtual BOOL PreTranslateMessage(MSG* pMsg);

// Implementation
    virtual ~CAutoCompleteComboBox();

    BOOL m_bAutoComplete;

    // Generated message map functions
    afx_msg void OnEditUpdate();



// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_COMBOBOXEX_H__115F422E_5CD5_11D1_ABBA_00A0243D1382__INCLUDED_)

Source file:

// ComboBoxEx.cpp : implementation file

#include "stdafx.h"
#include "AutoCompleteComboBox.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;

// CAutoCompleteComboBox

    m_bAutoComplete = TRUE;


BEGIN_MESSAGE_MAP(CAutoCompleteComboBox, CExtComboBox)

// CAutoCompleteComboBox message handlers

BOOL CAutoCompleteComboBox::PreTranslateMessage(MSG* pMsg)
    // Need to check for backspace/delete. These will modify the text in
    // the edit box, causing the auto complete to just add back the text
    // the user has just tried to delete.

    if (pMsg->message == WM_KEYDOWN)
        m_bAutoComplete = TRUE;

        int nVirtKey = (int) pMsg->wParam;
        if (nVirtKey == VK_DELETE || nVirtKey == VK_BACK)
            m_bAutoComplete = FALSE;

    return CComboBox::PreTranslateMessage(pMsg);

void CAutoCompleteComboBox::OnEditUpdate()
// if we are not to auto update the text, get outta here
if (!m_bAutoComplete)

// Get the text in the edit box
CString str;
int nLength = str.GetLength();

// Currently selected range
DWORD dwCurSel = GetEditSel();
WORD dStart = LOWORD(dwCurSel);
WORD dEnd = HIWORD(dwCurSel);

// Search for, and select in, and string in the combo box that is prefixed
// by the text in the edit box
if (SelectString(-1, str) == CB_ERR)
SetWindowText(str);        // No text selected, so restore what was there before
if (dwCurSel != CB_ERR)
SetEditSel(dStart, dEnd);    //restore cursor postion

// Set the text selection as the additional text that we have added
if (dEnd < nLength && dwCurSel != CB_ERR)
SetEditSel(dStart, dEnd);
SetEditSel(nLength, -1);

Technical Support Nov 15, 2007 - 3:15 AM

The incorrect background color in CExtComboBoxBase was fixed in Prof-UIS 2.81. Here are the lines from version history:

The text color and background color of the edit part of the CExtComboBoxBase are now synchronized with the colors you can set for the combo box by using the CExtComboBoxBase::SetBkColor() and CExtComboBoxBase::SetTextColor()<?code> methods. This was achieved by adding <code>OnQueryBackColor() and OnQueryTextColor() virtual methods to the CExtEditBase class.