C++ Combobox输入时自动完成

 

Combobox 在输入时自动完成

 

关键点

 

 

实现过程

 

 

BOOL m_bAuto;
BOOL CProject02Dlg::PreTranslateMessage(MSG* pMsg
{
    if (pMsg->message == WM_KEYDOWN)
    {
        int nChar = pMsg->wParam;
        if ((nChar == VK_DELETE) || (nChar == VK_BACK))
        {
            m_bAuto = FALSE;
        }
        else
        {
            m_bAuto = TRUE;
        }
    }
    return CDialog::PreTranslateMessage(pMsg);
}
void CProject02Dlg::OnEditchangeCombo1() 
{
    if (!m_bAuto)
    {
        return;
    }    
    CString strText = _T("");
    m_combobox1.GetWindowText(strText);
    int nLength = strText.GetLength();
    int nIndex = m_combobox1.FindString(-1strText);
    if (nIndex != CB_ERR)
    {
        m_combobox1.SetCurSel(nIndex);
        m_combobox1.SetEditSel(nLength, -1);
    }
}

 

 

 011941379777152.png  


 

备注

 

 

相关链接

                           

 

 




附件列表

 

转载于:https://www.cnblogs.com/xe2011/p/3576965.html

在Windows环境下使用C++开发ComboBox控件的自动补全功能通常是通过组合框(ComboBox)的自定义行为实现的。如果你希望取消ComboBox自动补全功能,可以通过设置组合框的样式或处理相应的消息来实现。 具体步骤如下: 1. **设置样式**:如果你使用的是原生Windows控件(如MFC中的CComboBox),可以通过设置组合框的样式来关闭自动完成。例如,在MFC中,可以设置组合框为`CBS_DROPDOWN`或`CBS_DROPDOWNLIST`样式,这样组合框将不会自动显示输入的文本,而只是显示下拉列表。 ```cpp // 假设m_ComboBox是CComboBox类型的成员变量 m_ComboBox.SetWindowText(_T("")); // 清空当前输入的文本 m_ComboBox.ModifyStyle(CBS_AUTOHSCROLL | CBS_DROPDOWNLIST, CBS_DROPDOWNLIST); ``` 2. **处理消息**:通过处理`CB_SIMPLE`消息也可以关闭自动补全功能。不过,通常情况下,使用样式设置更为直接和常见。 3. **阻止自动完成**:在某些情况下,你可能需要在运行动态阻止自动完成功能,可以通过重写消息处理函数来实现。例如,可以通过处理`WM_NOTIFY`消息来判断并修改自动生成的自动完成字符串。 ```cpp // 假设处理的是CBN_EDITUPDATE通知代码 LRESULT CALLBACK MyComboBoxProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { if (message == CBN_EDITUPDATE) { // 获取组合框的编辑句柄 HWND hwndEdit = GetDlgItem(hWnd, 0); // 0通常是编辑控件的子控件ID // 修改编辑控件的样式或行为来阻止自动补全 // ... } // 调用默认的消息处理函数 return DefWindowProc(hWnd, message, wParam, lParam); } ``` 请注意,具体代码实现可能会根据你使用的库和开发环境有所不同。上述代码仅为示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值