下载源文件- 5kb 介绍 CgzCombo扩展了CComboBox类以提供ComboBox功能 类似于一个Visual Basic组合框,具有以下功能: 两个“列”:1个可见的和1个隐藏的“索引列” 自动选择:从列表框项目。几乎完全基于Chris Maunder给出的例子 通知:发送一个CBN_CLOSEUP消息到父窗口时,用户 一个有效的选择使用鼠标*或*输入和移动离开控件。 验证:不允许用户在没有有效选择的情况下离开控件 这是很容易修改,如果不适合您的应用程序。 转义键:在组合框内按转义将其重置为原来的值 首先得到关注。 注意:您可以很容易地修改为隐藏两列并显示第三列 文本字
符串。(这就是为什么stringlist是这样做的) 添加更多的“列”也很容易。 类名是CgzCombo。 如何使用这个控件 (假设您在一个项目中已经有了一个组合框控件) 将gzcombo.h和gzcombo.cpp复制到您的项目目录 在visual studio中单击项目->添加到项目->文件并选择 刚才复制到项目目录中的两个文件。 将以下行添加到包含您的定义的头文件中 CComboBox变量: # include“gzcombo.h” 在同一个头文件中,将组合框变量的类型更改为 CComboBox CgzCombo。 如果你想立即行动,在你的应用程序中处理ON_CBN_CLOSEUP 由用户有效选择,否则…不要。 只有4个额外的功能,你调用与控制交互: 隐藏,复制Code
//Add items to the list (initialization) void AddRow(CString text, CString ID); //Retrieve the "hidden column" value of the current selection CString GetCurrentRowID(); //Clear combo box and associated string list void Clear(); //Remove the current combo box item and associate string list item void RemoveCurrentRow();
我对这些函数做了大量注释,这样您就不会有任何问题了 扩展或修改它们。 这种控制产生于需要移植用Microsoft Access编写的应用程序 Visual c++。我们的访问应用程序大量使用隐藏ID字段的组合框。 通常,用户会从一个容易阅读的文本列表中选择应用程序 实际上需要一个索引值来进行数据库查找,等等。 autoselect代码是从Chris Maunder的autoselect示例中借来的 源代码的网站。我做了一些修改:我需要组合提醒 父窗口,当一个有效的选择,不仅通过鼠标,但如果用户 输入一个部分字符串,自动选择匹配就会产生,用户就会脱离控件。 我在控件中覆盖反射的ON_KILLFOCUS消息并发送 如果选择有效,则发送给父窗口的ON_CLOSEUP消息。我试着 ON_SELENDOK,但在事件的顺序上有很多问题。也为 一些原因,微软文档声明,它的首选使用ON_CLOSEUP。 我还修改了Chris的示例,以观察在编辑时是否按下了escape键 组合框的一部分将把编辑框的文本恢复到它在 控制先接收焦点。我这样做是因为访问组合框允许您这样做 我们的客户已经习惯了这种情况。)你不会相信人们是多么坚强 一旦习惯了这样的小细节,他们就会有这种感觉!& lt; grin>) 隐藏列是一个CStringList对象。当你看代码的时候,你会 请注意,列表框中的可见文本是正常存储在列表框中,但也存储在列表框中 作为字符串列表中的一列,ID作为字符串列表中的第二列。为什么 我这样做?因为有时我想显示一个完全不同的值 用户,但仍然存储原始文本和ID列。您可以很容易地删除或添加更多 “专栏”,如果你喜欢的话。 我在基于对话框和FormView的项目中使用这个控件。在Visual studio 6中开发的,我是 不确定它是否将编译在以前的版本或不,但它编译干净 预警级别4。 如果你找到了,请发邮件到john@zerocentral.com 一个bug,有一个建议或问题。 本文转载于:http://www.diyabc.com/frontweb/news352.html