zoukankan      html  css  js  c++  java
  • 自动完成没有IAutoComplete

    介绍 已经有好几篇文章介绍了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

  • 相关阅读:
    从程序员到项目经理(16):原来一切问题都是可以解决的【转载】
    从程序员到项目经理(15):项目管理三大目标【转载】
    从程序员到项目经理(14):项目经理必须懂一点“章法”【转载】
    从程序员到项目经理(13):如何管理自己的时间(下)【转载】
    从程序员到项目经理(12):如何管理自己的时间(上)【转载】
    Linux的五个查找命令
    AWK 简明教程
    libstdc++.so.5: cannot open shared object file: No such file or directory
    中文分词器ICTCLAS使用方法(Java)
    Jetty实战之 安装 运行 部署
  • 原文地址:https://www.cnblogs.com/Dincat/p/13431530.html
Copyright © 2011-2022 走看看