当初在两年多前开始做现在这个项目时,我们最初决定花长时间来升级现有的游戏引擎,包括服务器和客户端,我负责了一部分的客户端的功能升级和配套工具集的开发和升级,我们这套引擎的工具集包含工具比较多,每个工具的工作模式都是,编辑大量的数据并存储成一个文件,每个数据文件都有自己的ID和名称,策划和美术人员每次想修改某个特定ID或者名称的数据项节点时,都不是太方便,虽然都有搜索功能,但是首先需要选择按照ID还是名称搜索,然后输入关键字,再点击搜索按钮,才能选中需要的项,并不是太方便。更不方便的是程序员针对每个搜索功能都需要编写大量的针对性搜索代码,功能差不多,但具体细节不同。

  说道这里,无论是否用过mac的人,只要用过iTunes的人,都知道苹果的控件,有一个带图标的搜索框,看上去很通用,因为到处都有,只要你一输入关键字,下面的List控件立即开始筛选符合条件的项目,而且点击搜索框左边的放大镜图标,还能弹出菜单更改搜索选项。而实际上人家确实是一个通用的内建控件,但windows下至少MFC没有这样一个内建的控件。

  iTunes的搜索框:

  iTunes的搜索基本都是即时改变列表框等控件里匹配的项目,但是我还想加入一个对匹配关键字的高亮显示,比如改变背景什么的,这样的搜索才更加直观,但iTunes的这种搜索方式在MFC下实现很困难,难以通用,因为我需要对每个关联的数据集控件进行继承重写和定制,尤其是绘制代码的修改,工作量太大不容易实现。

  但是如果我在搜索框搜索,这时会有像Combobox控件这样自动弹出下拉列表,显示出匹配的项目,并且高亮显示出关键字,当我点击选中或者键盘方向键选择后回车等操作后,直接会在数据集的控件中选中我刚才选择的搜索结果,这样一来,无论和什么数据集控件的关联,都只是单纯的数据关联,没有任何代码的耦合行,定制性极强,同时我也可以任意的完善搜索框的代码。

  后来我在CodeProject上找到了两个项目:

  1:一个自定义 MFC CEdit 外观的项目,作者的本身目的就是要把CEdit的外观变成iTunes搜索框的外观,左右各一个按钮图标,但不具备任何搜索功能。地址:http://www.codeproject.com/Articles/15043/iTunes-like-Find-Edit-Control?msg=4551618#xx4551618xx

  2:一个自定义 MFC CEdit 和 CCombobox 的项目,能根据你在 CEdit 和 CCombobox 中的输入,自动在下拉列表中显示补全你输入的项,形式上非常像已有的 CCombobox 控件,但是多了自动弹出下拉列表和补全功能,这也是做着的主要目的。地址:http://www.codeproject.com/Articles/2607/AutoComplete-without-IAutoComplete

  项目1的外观和项目2的自定义 Listbox window,如果我将这两项结合,就正好出现了我想要的东西了:iTunes搜索框的外观和通用的搜索显示补全。

  于是诞生了这个项目:GUSIconEdit - General Used Search Icon Edit

  

  如图所示,这个控件可以和任意的数据集控件(CListbox, CListCtrl, CTreeCtrl等)结合,非常轻易的搜索和显示结果并定位结果在数据集控件中的位置。搜索框的外观是自定义皮肤,左边的放大镜可以定制一个菜单,用来显示搜索选项,比如大小写匹配和是否从开头搜索等等,右边的小叉可以直接清除输入内容等;下拉列表中全部都是数据集中符合抖索条件的数据项(可以设置是否对筛选的结果升降排序),黄色背景和选中项的深蓝色背景用来表示这是当前匹配的关键字。所有的颜色和外观都可以通过接口自由修改定制。

  虽然是使用的已有开源项目构建,但是这两个项目我都只使用了其中的一部分,而且改动的代码比较多,很多接口和结构我几乎都重写或者修改了,同时也优化了搜索和结果排序等代码(这个改动最多,使得我修改了整个列表框内部的数据结构),还有就是这个下拉列表以前拖动窗口或者鼠标点击其他区域,列表框并不立即消失,原作者使用的是一个timer查看父窗口的位置和原位置是否相同,如果不同表示用户移动了,那么列表框消失,实际上由于bug,会导致有些情况,列表框不能像Combobox的列表框一样,点击其它地方立即消失,这个问题我也解决了,花了很多时间才解决其中一些很莫名的问题。

  这个项目我已经广泛的应用在了公司引擎配套的工具集中,效果也非常好,主要功能一年多以前就写完并开始使用了,平常有时间或想起来了就偶尔改进改进,最近时间比较多,就正式的整理并打算发布了。

  由于这是个人项目,版权不属于公司(应该是本人授权了公司使用:)),除了遵守其中有些代码原作者的Licence外,我的其余代码都是使用The Code Project Open License (CPOL),不过这些Licences都是允许你随意修改使用以及商业项目的应用(但要保留原作者的版权),项目我已经放到了GitHub上,地址:https://github.com/yaukeywang/GUSIconEdit。感兴趣的同学可以自行下载研究扩充,或根据需要使用在你自己的项目中,示例程序已经包含了大部分功能的演示,其他的大家去看代码吧,暂时还没有文档,以后或许会补充,我很乐意大家下载和使用,希望这个东西能对你有所帮助。

  Enjoy It!

转载于:https://www.cnblogs.com/yaukey/archive/2013/05/31/GUSIconEdit.html

Windows下一个可与其他数据集控件结合的通用的搜索框GUSIconEdit相关推荐

  1. 服务器下最大能容量多少文件,windows下一个文件夹下面最多可以放多少文件(ntfs格式略过)...

    那么怎么来测试这样一个问题呢,很显然我们一个个的去建立文件是不现实的,没那么多时间,而且这个方法也太笨了.这里我们会用到批处理命令,新建一个bat文件,然后将"for /l %%a in ( ...

  2. ST_Curve --- 一个专业的曲线绘制控件

    一:什么是ST_Curve?   ST_Curve是一个专业的曲线绘制控件,只要是xy坐标系的曲线,都可绘制,纵坐标只能显示为值,横坐标可以显示为值或者时间(如果你愿意为控件提供插件,则坐标可显示任意 ...

  3. 【VS开发】免费打工仔:一个完善的ActiveX Web控件教程

    作者 David Marcionek. 翻译 免费打工仔 这个教程可以帮助你快速开发一个ActiveX控件.其中将要讲解关于ActiveX开发的一些基础概念,诸如方法(method).属性(prope ...

  4. 免费打工仔:一个完善的ActiveX Web控件教程

    免费打工仔:一个完善的ActiveX Web控件教程 出自Ogre3D开放资源地带 跳转到: 导航, 搜索 原作者 David Marcionek. 翻译 免费打工仔 这个教程可以帮助你快速开发一个A ...

  5. 一个完善的ActiveX Web控件教程

    免费打工仔:一个完善的ActiveX Web控件教程 出自Ogre3D开放资源地带 跳转到:  导航,  搜索 原作者 David Marcionek. 翻译 免费打工仔 这个教程可以帮助你快速开发一 ...

  6. Windows Forms高级界面组件-使用状态栏控件

    状态栏(StatusStrip)控件通常显示在窗体的底部,向用户提供有关应用程序状态的信息.如Word应用程序使用状态栏提供页码.行数和列数的信息. StatusStrip派生于ToolStrip,通 ...

  7. TeeChart替代品,MFC下好用的高速绘图控件-(Hight-Speed Charting)

    相关链接: C++ GUI 绘图控件目录 MFC VS2010 使用TeeChart绘图控件 - 之一 - 控件和类的导入 VS2010 使用TeeChart绘图控件 - 之二 - 绘制图形(折线图, ...

  8. 重新想象 Windows 8.1 Store Apps (75) - 新增控件: Hub, Hyperlink

    原文:重新想象 Windows 8.1 Store Apps (75) - 新增控件: Hub, Hyperlink [源码下载] 重新想象 Windows 8.1 Store Apps (75) - ...

  9. 梅花雨做的一个日历 Javascript 页面脚本控件

    梅花雨做的一个日历 Javascript 页面脚本控件 比较好用,背景颜色可以自己用替换的形式改 //------------------------------------------------- ...

最新文章

  1. Pandas库常用函数和操作
  2. 无线WEP网络***
  3. 【CodeForces - 1038C】Gambling (博弈问题,优先队列模拟,贪心)
  4. java图片资源存放_Java编程中图片文件放哪
  5. R-CNN目标检测第三弹(Faster R-CNN)
  6. SAP Business One助力洛德集团实现巨大商业价值
  7. div自定义下拉框组件
  8. 《南溪的目标检测学习笔记》——预训练微调的学习笔记
  9. document.execCommand()的用法小记
  10. Linux Shell脚本面试25问
  11. Nature:分离到一种位于原核生物-真核生物“交界”的古菌
  12. 阿里云 ECS windows服务器创建+部署+域名
  13. 【Python】使用Scikit-Learn进行机器学习步骤介绍
  14. Control Groups (Cgroups)-详解
  15. ftp下载工具绿色版,网络上难找的绿色版ftp下载工具
  16. 如何打开倾斜摄影数据osgb
  17. ESP8266 Arduino Hard resetting via RTS pin...
  18. Emgu CV4图像处理之膨胀和腐蚀、梯度计算、开闭运算14(C#)
  19. 简单便签程序--青柠便签
  20. vnc server,vnc server是干嘛的

热门文章

  1. leetcode —— 216. 组合总和 III
  2. 中国计算机学会推荐的国际学术刊物
  3. 事件 ID 3001错误的解决方法
  4. LPeg 0 10的编译与使用
  5. STM32 - 定时器高级应用说明 - 01 - Filtering stage - 波形输入的过滤
  6. 【小程序】【Tips】【实践】Json 的对象 和 Json字符串 的区别和转换
  7. vue 项目中使用粘性布局不起作用_做vue项目中遇到的坑总结与学习
  8. k8s 查看pod流量_Kubernetes K8S之Pod生命周期与探针检测
  9. ui设计移动端字体适配_超全面的移动端UI 设计规范整理汇总
  10. mysql update 多个字段_MySQL数据库基础