65.9K
CodeProject 正在变化。 阅读更多。
Home

WTL 的自动完成组合框

2003年8月18日

1分钟阅读

viewsIcon

53493

downloadIcon

2484

WTL 自动完成组合框的实现。

Sample Image - wtlautocompletecombo.jpg

引言

本文假定读者对 C++、Win32 编程和 WTL 有基本的了解。

这是一个为 WTL 实现的自动完成 ComboBox。实际上,这是对 这里 找到的 MFC 版本的移植,该版本由 Chris Maunder 开发。

背景

关于自动完成 ComboBox 没什么好说的,除了组合框样式通常包括 CBS_DROPDOWN。开发者需要负责序列化 ComboBox 的内容(这意味着加载/保存到注册表、文件或数据库)。为了帮助您在项目中实现自动完成对话框,我用 // _AC_INSERT_ 注释标记了需要修改的代码行。

使用代码

在您的项目中使用的代码非常简单,第一步是编辑对话框或窗口类的头文件,并包含以下行:#include "AutoCombo.h"

下一步是将以下行插入为对话框或窗口类的成员变量:CAutoCombo m_cboAuto

为了确保继承的自动完成组合框类处理组合框消息,我们必须将任何通知反射到其他控件,请参阅以下代码片段。

... Some other code
BEGIN_MSG_MAP(CMainDlg)
    MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
    COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
    COMMAND_ID_HANDLER(IDOK, OnOK)
    COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
    REFLECT_NOTIFICATIONS() 
END_MSG_MAP()     
... Some other code

需要注意的是,如果存在任何 ATL_ 消息宏,则 REFLECT_NOTIFICATIONS() 必须位于 ATL_ 消息宏的开头。

最后,在对话框初始化或窗口创建时(通常在 WM_INITDIALOG 处理程序或 WM_CREATE 处理程序中处理),通过添加以下行来子类化组合框控件。

历史

V1.0 文章创建。

© . All rights reserved.