效果演示
上位机组合框自动补全输入内容
例程实现IE、Netscape的URL框的功能:当输入一定的字母后,程序自动完成后面的输入。
参见下图。
上位机组合框自动补全输入内容
点击按钮或选择组合框不同文本后,其内容会显示在编辑框内。
实现过程
1.新建立一对话框工程,添加例程内两文件AUTOCOMPLETIONCOMBOBOX.H,AUTOCOMPLETIONCOMBOBOX.CPP到自己工程。
工程会多出一个集成类CAutoCompletionComboBox.两文件的源代码可以在后面复制使用。
2.接着就是类的使用
在主对话框类中包含类的头文件,如上图添加组合框控件,关联控件变量。
这样就可以快速实现组合框提前显示相似文本内容功能。
当前组合框的内容要事先在控件属性里添加,或自己通过代码添加。
3.至于按钮编辑框可以根据需要添加使用。
下面是两文件源代码,也可以直接下载例程工程使用。
如果相实现在输入时,列表中匹配当前文本的项目被自动选择。
可以替换两文件为附件的两文件
- #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);
- }
复制代码
|