带查询功能(自动补充完整)的组合框控件

本文介绍如何在MFC应用程序中实现一个具备自动补全功能的组合框。通过创建一个名为AutoComplete的新类并继承自CComboBox,我们可以在用户输入时提供匹配项建议。文章详细说明了从创建新类到添加预设数据及处理用户输入的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)新建一个基于对话框的应用程序

(2)在工程中添加新类AutoComplete,基类为CComboBox.

           为该类添加一个变量public:      bool m_bAutoComplete;

(3)在对话框上添加组合框控件,添加成员变量m_sercmb,type为AutoComplete

          在对话框的头文件 2_068Dlg.h添加代码#include "AutoComplete.h"

(4)在对话框OnInitDialog()方法中添加代码:

BOOL CMy2_068Dlg::OnInitDialog()
{
 CDialog::OnInitDialog();

 ……
 // TODO: Add extra initialization here
 m_sercmb.AddString("Monday");
 m_sercmb.AddString("Tuesday");
 m_sercmb.AddString("Wednesday");
 m_sercmb.AddString("Thursday");
 m_sercmb.AddString("Friday");
 m_sercmb.AddString("Saturday");
 m_sercmb.AddString("Sunday");

 return TRUE;  // return TRUE  unless you set the focus to a control
}

(5)在新类AutoComplete中添加=CBN_EDITUPDATE消息的实现函数

void AutoComplete::OnEditupdate()
{
 if(!m_bAutoComplete) return;
 CString str;
 GetWindowText(str);                              //获得组合框的编辑框文本
 int nLength=str.GetLength();               //获得文本长度
 DWORD dwCurSel=GetEditSel();     //获得文本的起始位置

 DWORD dStart =LOWORD(dwCurSel);
 DWORD dEnd =HIWORD(dwCurSel);
 if(SelectString(-1,str)==CB_ERR)          //查找字符
 {
  SetWindowText(str);                                //设置显示字符串
  if(dwCurSel!=CB_ERR)             
   SetEditSel(dStart,dEnd);                        //设置编辑框部分选中的字符串
 }
 GetWindowText(str);
 if(dEnd < nLength && dwCurSel!=CB_ERR)
  SetEditSel(dStart,dEnd);
 else
  SetEditSel(nLength,-1);
 

}

(6)在新类AutoComplete中添加PreTranslateMessage消息的实现函数

BOOL AutoComplete::PreTranslateMessage(MSG* pMsg)
{
 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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值