工控编程吧
标题:
上位机组合框自动补全输入内容
[打印本页]
作者:
qq263946146
时间:
2019-7-10 12:33
标题:
上位机组合框自动补全输入内容
效果演示
(, 下载次数: 3)
上传
点击文件名下载附件
例程实现IE、Netscape的URL框的功能:当输入一定的字母后,程序自动完成后面的输入。
参见下图。
(, 下载次数: 2)
上传
点击文件名下载附件
点击按钮或选择组合框不同文本后,其内容会显示在编辑框内。
实现过程
1.新建立一对话框工程,添加例程内两文件AUTOCOMPLETIONCOMBOBOX.H,AUTOCOMPLETIONCOMBOBOX.CPP到自己工程。
工程会多出一个集成类CAutoCompletionComboBox.两文件的源代码可以在后面复制使用。
2.接着就是类的使用
在主对话框类中包含类的头文件,如上图添加组合框控件,关联控件变量。
这样就可以快速实现组合框提前显示相似文本内容功能。
当前组合框的内容要事先在控件属性里添加,或自己通过代码添加。
3.至于按钮编辑框可以根据需要添加使用。
下面是两文件源代码,也可以直接下载例程工程使用。
(, 下载次数: 0)
上传
点击文件名下载附件 如果相实现在输入时,列表中匹配当前文本的项目被自动选择。
可以替换两文件为附件的两文件
(, 下载次数: 0)
上传
点击文件名下载附件
#if !defined(AFX_AUTOCOMPLETIONCOMBOBOX_H__A2F5170E_7F18_11D2_9B7D_006097F7F4CE__INCLUDED_)
#define AFX_AUTOCOMPLETIONCOMBOBOX_H__A2F5170E_7F18_11D2_9B7D_006097F7F4CE__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// AutoCompletionComboBox.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CAutoCompletionComboBox window
class CAutoCompletionComboBox : public CComboBox
{
// Construction
public:
CAutoCompletionComboBox();
protected:
virtual void HandleCompletion();
virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
private:
CEdit* m_pEdit;
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAutoCompletionComboBox)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CAutoCompletionComboBox();
// Generated message map functions
protected:
//{{AFX_MSG(CAutoCompletionComboBox)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_AUTOCOMPLETIONCOMBOBOX_H__A2F5170E_7F18_11D2_9B7D_006097F7F4CE__INCLUDED_)
复制代码
#include "stdafx.h"
#include "AutoCompletionComboBox.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAutoCompletionComboBox
CAutoCompletionComboBox::CAutoCompletionComboBox()
: CComboBox(),
m_pEdit(NULL)
{
}
CAutoCompletionComboBox::~CAutoCompletionComboBox()
{
}
BEGIN_MESSAGE_MAP(CAutoCompletionComboBox, CComboBox)
//{{AFX_MSG_MAP(CAutoCompletionComboBox)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAutoCompletionComboBox message handlers
void CAutoCompletionComboBox::HandleCompletion()
{
// Make sure we can 'talk' to the edit control
if ( m_pEdit == NULL )
{
m_pEdit = new CEdit();
m_pEdit->SubclassWindow(GetDlgItem(1001)->GetSafeHwnd());
}
// Save the state of the edit control
CString windowtext;
m_pEdit->GetWindowText(windowtext);
int start,end;
m_pEdit->GetSel(start,end);
// Perform actual completion
int bestindex = -1;
int bestfrom = INT_MAX;
for ( int x = 0; x < GetCount(); x++ )
{
CString s;
GetLBText(x,s);
int from = s.Find(windowtext);
if ( from != -1 && from < bestfrom )
{
bestindex = x;
bestfrom = from;
}
}
if ( bestindex != -1 && GetCurSel() != bestindex )
{
// Select the matching entry in the list
ShowDropDown(TRUE);
SetCurSel(bestindex);
// Restore the edit control
m_pEdit->SetWindowText(windowtext);
m_pEdit->SetSel(start,end);
}
}
BOOL CAutoCompletionComboBox::OnCommand(WPARAM wParam, LPARAM lParam)
{
if ( HIWORD(wParam) == EN_CHANGE )
{
HandleCompletion();
return true;
}
return CComboBox::OnCommand(wParam, lParam);
}
复制代码
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4