QQ登录

只需一步,快速开始

上位机组合框自动补全输入内容

[ 复制链接 ]
效果演示

上位机组合框自动补全输入内容

上位机组合框自动补全输入内容

例程实现IE、Netscape的URL框的功能:当输入一定的字母后,程序自动完成后面的输入。
参见下图。

上位机组合框自动补全输入内容

上位机组合框自动补全输入内容

点击按钮或选择组合框不同文本后,其内容会显示在编辑框内。

实现过程
1.新建立一对话框工程,添加例程内两文件AUTOCOMPLETIONCOMBOBOX.H,AUTOCOMPLETIONCOMBOBOX.CPP到自己工程。
工程会多出一个集成类CAutoCompletionComboBox.两文件的源代码可以在后面复制使用。

2.接着就是类的使用
在主对话框类中包含类的头文件,如上图添加组合框控件,关联控件变量。
这样就可以快速实现组合框提前显示相似文本内容功能。
当前组合框的内容要事先在控件属性里添加,或自己通过代码添加。

3.至于按钮编辑框可以根据需要添加使用。
下面是两文件源代码,也可以直接下载例程工程使用。
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:CTest.rar 
文件大小:32.07 KB  售价:1金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

如果相实现在输入时,列表中匹配当前文本的项目被自动选择。
可以替换两文件为附件的两文件
请点击此处下载

查看状态:已购买或有权限

您的用户组是:游客

文件名称:Desktop.rar 
文件大小:2.01 KB 
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


  1. #if !defined(AFX_AUTOCOMPLETIONCOMBOBOX_H__A2F5170E_7F18_11D2_9B7D_006097F7F4CE__INCLUDED_)
  2. #define AFX_AUTOCOMPLETIONCOMBOBOX_H__A2F5170E_7F18_11D2_9B7D_006097F7F4CE__INCLUDED_

  3. #if _MSC_VER >= 1000
  4. #pragma once
  5. #endif // _MSC_VER >= 1000
  6. // AutoCompletionComboBox.h : header file
  7. //

  8. /////////////////////////////////////////////////////////////////////////////
  9. // CAutoCompletionComboBox window

  10. class CAutoCompletionComboBox : public CComboBox
  11. {
  12. // Construction
  13. public:
  14.         CAutoCompletionComboBox();

  15. protected:
  16.   virtual void HandleCompletion();
  17.   virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);

  18. private:
  19.   CEdit*      m_pEdit;

  20. // Attributes
  21. public:

  22. // Operations
  23. public:

  24. // Overrides
  25.         // ClassWizard generated virtual function overrides
  26.         //{{AFX_VIRTUAL(CAutoCompletionComboBox)
  27.         //}}AFX_VIRTUAL

  28. // Implementation
  29. public:
  30.         virtual ~CAutoCompletionComboBox();

  31.         // Generated message map functions
  32. protected:
  33.         //{{AFX_MSG(CAutoCompletionComboBox)
  34.                 // NOTE - the ClassWizard will add and remove member functions here.
  35.         //}}AFX_MSG

  36.         DECLARE_MESSAGE_MAP()
  37. };

  38. /////////////////////////////////////////////////////////////////////////////

  39. //{{AFX_INSERT_LOCATION}}
  40. // Microsoft Developer Studio will insert additional declarations immediately before the previous line.

  41. #endif // !defined(AFX_AUTOCOMPLETIONCOMBOBOX_H__A2F5170E_7F18_11D2_9B7D_006097F7F4CE__INCLUDED_)
复制代码
  1. #include "stdafx.h"
  2. #include "AutoCompletionComboBox.h"

  3. #ifdef _DEBUG
  4. #define new DEBUG_NEW
  5. #undef THIS_FILE
  6. static char THIS_FILE[] = __FILE__;
  7. #endif

  8. /////////////////////////////////////////////////////////////////////////////
  9. // CAutoCompletionComboBox

  10. CAutoCompletionComboBox::CAutoCompletionComboBox()
  11. : CComboBox(),
  12.   m_pEdit(NULL)
  13. {
  14. }

  15. CAutoCompletionComboBox::~CAutoCompletionComboBox()
  16. {
  17. }


  18. BEGIN_MESSAGE_MAP(CAutoCompletionComboBox, CComboBox)
  19.         //{{AFX_MSG_MAP(CAutoCompletionComboBox)
  20.                 // NOTE - the ClassWizard will add and remove mapping macros here.
  21.         //}}AFX_MSG_MAP
  22. END_MESSAGE_MAP()

  23. /////////////////////////////////////////////////////////////////////////////
  24. // CAutoCompletionComboBox message handlers

  25. void CAutoCompletionComboBox::HandleCompletion()
  26. {
  27.   // Make sure we can 'talk' to the edit control
  28.   if ( m_pEdit == NULL )  
  29.   {
  30.     m_pEdit = new CEdit();
  31.     m_pEdit->SubclassWindow(GetDlgItem(1001)->GetSafeHwnd());
  32.   }

  33.   // Save the state of the edit control
  34.   CString windowtext;
  35.   m_pEdit->GetWindowText(windowtext);

  36.   int start,end;
  37.   m_pEdit->GetSel(start,end);

  38.   // Perform actual completion
  39.   int bestindex = -1;
  40.   int bestfrom  = INT_MAX;
  41.   for ( int x = 0; x < GetCount(); x++ )
  42.   {
  43.     CString s;
  44.     GetLBText(x,s);

  45.     int from = s.Find(windowtext);

  46.     if ( from != -1 && from < bestfrom )
  47.     {
  48.       bestindex = x;
  49.       bestfrom  = from;
  50.     }
  51.   }

  52.   if ( bestindex != -1 && GetCurSel() != bestindex )
  53.   {
  54.     // Select the matching entry in the list
  55.     ShowDropDown(TRUE);
  56.     SetCurSel(bestindex);

  57.     // Restore the edit control
  58.     m_pEdit->SetWindowText(windowtext);
  59.     m_pEdit->SetSel(start,end);
  60.   }
  61. }

  62. BOOL CAutoCompletionComboBox::OnCommand(WPARAM wParam, LPARAM lParam)
  63. {
  64.   if ( HIWORD(wParam) == EN_CHANGE )
  65.   {
  66.     HandleCompletion();
  67.     return true;
  68.   }

  69.         return CComboBox::OnCommand(wParam, lParam);
  70. }
复制代码



回复

使用道具 举报

快速回复 返回列表 客服中心 搜索