工控编程吧
标题:
68上位机VC MFC组合框实现查询功能
[打印本页]
作者:
qq263946146
时间:
2015-12-9 21:20
标题:
68上位机VC MFC组合框实现查询功能
(, 下载次数: 1)
上传
点击文件名下载附件
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添加些文本,进行查询测试;
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/d4de457ff9fb2b856a480761230c3999/0/0/w_19rt6vhlz5.swf-albumId=5003286509-tvId=5003286509-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4