68上位机VC MFC组合框实现查询功能
68上位机VC MFC组合框实现查询功能
功能展示 在使用组合框时,我时想实现在组合框中输入内容,实现输入内容的标底功能,但微软自带的组合框不带此功能,我们得亲自动手实现。用户输入一字符,就进行查询组合框中以此字符打头的内容,并将查询结果显示出来。效果如图 要点提示 实现查询功能可以通过CComboxBox的查询函数SelectString方法实现;语法int SelectString( int nStartAfter, LPCTSTR lpszString ); nStartAfter为开始标识 的位置索引; lpszString 为所要查找的字符串; 再通过SetEditSel()函数实现查找结果的选中的显示;语法BOOL SetEditSel( int nStartChar, int nEndChar ); nStartChar为开始标识的位置索引; nEndChar 为结束标识的位置索引 实现功能 1.新建基于对话框的应用程序 2.从CComboBox派生一个自定义类class CSerchCombo : public CComboBox;添加一变量BOOL m_bEexcuteSearch;并在PreTranslateMessage()函数中赋值 - {
- if(pMsg->message==WM_KEYDOWN)
- {
- m_bEexcuteSearch=true;
- int nVirtKey=(int)pMsg->wParam;
- if(nVirtKey==VK_DELETE||nVirtKey==VK_BACK)
- m_bEexcuteSearch=false;
- }
- return CComboBox::PreTranslateMessage(pMsg);
- }
复制代码3.添加组合框的CBN_EDITUPDATE消息响应函数或CBN_EDITCHANGE都行,我们当前工程添加CBN_EDITCHANGE消息响应函数 - void CSerchCombo::OnEditchange()
- {
- if(!m_bEexcuteSearch)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);
- }
复制代码最后是在主对话框中使用我们自定义的这个组合框类;添加组合框资源并关联变量CSerchCombo m_Combo;给m_Combo添加些文本,进行查询测试;
我们来演示下功能实现的整个过程
|