ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

自动完成没有IAutoComplete

2020-08-04 10:03:45  阅读:269  来源: 互联网

标签:IAutoComplete 控件 AddSearchString SetMode ONLY 自动 MODE 完成 EditCtrl1


介绍 已经有好几篇文章介绍了CodeProject上的自动完成函数。许多子类包含CEdit或CComboBox,并完成控件中的输入或在下拉列表中显示各种类型。另一种选择是使用IAutoComplete和IEnumString以及许多其他I函数。 当我看到Klaus Probst设计的wtl自动完成功能时,我想,“很酷,但即使没有ie浏览器和神秘的调用,所有这些都应该可以工作”。而且,相当容易。 如何使用 复制文件(ACEdit。(ACListWnd.cpp/h + ACListWnd.cpp/h),然后将它们添加到项目并插入头,最好是在stdafx.h中。隐藏,声明一个CEdit或CComboBox并子类化它到CACEdit隐藏 复制Code

bevorehand:
CEdit m_EditCtrl1;

afterwards:
CACEdit m_EditCtrl1;

然后初始化控件并定义模式,例如在OnInitDialog中。隐藏,复制Code

m_EditCtrl1.Init();
m_EditCtrl1.SetMode(); // default = _MODE_STANDARD_       

可能的模式有: _MODE_STANDARD_ _MODE_SEPARATION_ _MODE_FILESYSTEM_ _MODE_FS_ONLY_FILE_ _MODE_FS_ONLY_DIR_ _MODE_FS_START_DIR_ _MODE_SD_ONLY_FILE_ _MODE_SD_ONLY_DIR_ _MODE_CURSOR_O_LIST_ _MODE_FIND_ALL_。 请往下看更多的解释。如果您忘记了Init(),初始化将在稍后的SetMode()中完成。 最后,插入字符串。有两种不同的方法可以做到这一点:AddSearchString和AddSearchStrings。隐藏,复制Code

m_EditCtrl1.AddSearchString("Test1");
m_EditCtrl1.AddSearchString("Test2");
m_EditCtrl1.AddSearchString("Tiger");
m_EditCtrl1.AddSearchString("Dog");
  
or

static LPCTSTR STRINGS[] = 
{
    _T("Test1"),
    _T("Test2"),
    _T("Tiger"),
    _T("Dog"),
    NULL
};

m_EditCtrl1.AddSearchStrings(STRINGS);    

在插入字符串之前,函数AddSearchStrings()调用RemoveSearchAll(),并清除CStringArray类型的内部项列表。AddSearchStrings()可以与AddSearchString()结合使用,但反之则不行。字符串的特定删除目前还没有实现。 这是我们需要一个简单的自动完成。此外,还有可能实现分离器。m_EditCtrl1.SetSeparator (_T (" \ \ "));使\起作为一行的开始或结束的作用。如果您输入XXX\t\YYY,在我们的示例中,您将看到一个包含Test1、Test2和Tiger的列表。 但是,如果用户输入xxTi,则失败。如果你使用常数,比如<Parameter1>(在我们的例子中,用大括号括起来的常量<>)然后可以使用前缀来扩展命令SetSeparator(),前缀是常量的第一个符号。前缀不能是searchstring的一部分。但是,它确实出现在列表中,并且是结果的一部分。隐藏,复制Code

...
m_EditCtrl1.AddSearchString("PARAMETER1>"); // without prefix!
m_EditCtrl1.AddSearchString("PARAMETER2>");
m_EditCtrl1.AddSearchString("PARAMETER3>");
m_EditCtrl1.SetSeparator("<",'<');
...     

如果输入了XXX<,这个示例也会产生结果。或/ & lt;。 和文件系统的自动完成:复制Code

...
m_DirEdit.SetMode(_MODE_FILESYSTEM_);
...

现在,当您开始键入路径时,控件将下拉一个路径列表,其中的路径与您迄今为止在开始菜单中键入的路径相匹配——run-command(在Win2K或IE 5.0机器上)。 SetMode(_MODE_FS_ONLY_FILE_)只列出文件,而SetMode(_MODE_FS_ONLY_DIR_)只列出目录。隐藏,复制code

m_DirEdit.SetMode(_MODE_FS_START_DIR_);
m_DirEdit.SetStartDirectory(_T("C:\\Windows\\"));
...      

如果你使用SetMode() _MODE_FS_START_DIR_, _MODE_SD_ONLY_FILE_或_MODE_SD_ONLY_DIR_目录可以由SetStartDirectory()表示。 在上面的示例中,控件列出了C:\窗口中的所有文件,但与_MODE_FILESYSTEM_不同,它没有显示路径(C:\窗口)。 版本1.2 OnGetMinMaxInfo()遵循“yogurt”(cp. comments)的建议-_MODE_FIND_ALL_ for SetMode()如果你进入,函数会发现One, One1, Melon, Lemon,… 版本1.1 -int GetLBText(int nIndex, LPTSTR lpszText);-void GetLBText(int nIndex, CString&-int SelectString(int nStartAfter, LPCTSTR lpszString);-void ShowDropDown(BOOL bShowIt = TRUE);-void ResetContent();-int GetCurSel() 如果使用SetMode()设置了这个标志,那么已经可以在一个空的输入字段中用光标键(向上/向下)指示搜索字符串列表。但是,这只适用于CEdit控件,因为组合框中的光标键有不同的功能。 结论控制看起来像Windows中的功能(触发了项目),但它完全不需要IAutoComplete。当然有很多扩展它的方法,但是由于它以它应该的方式工作,我对它没有意见。希望这个控件对你们有用-我写的很有趣。 来源: IAutoComplete和自定义IEnumString实现的WTL对话框 (克劳斯·普罗斯特)我的灵感 自动完成和ACTest演示应用(Paul DiLascia)组合框/编辑控件的识别技巧 增强的CCheckComboBox (Magerusan Grigore Cosmin)显示了如何在选中时保持窗口不活动(创建) 本文转载于:http://www.diyabc.com/frontweb/news244.html

标签:IAutoComplete,控件,AddSearchString,SetMode,ONLY,自动,MODE,完成,EditCtrl1
来源: https://www.cnblogs.com/Dincat/p/13431530.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有