AlphaView






3.25/5 (10投票s)
在 SQLite3 表或视图上虚拟化的 WTL 列表视图控件。
引言
AlphaView 使用虚拟模式的列表视图来查看存储在 SQLite 3 数据库中的数据。 当 ListViewCtrl
处于虚拟模式(通过 LVS_OWNERDATA
)时,列表视图本身不存储任何数据。 列表视图通过两个通知消息请求数据
LVN_GETDISPINFO
LVN_ODCACHEHINT
第一个通知通过项目请求数据,第二个通知帮助可选的缓存管理器预取数据。 真正的工作由数据库后端完成,在这种情况下,令人惊叹的 SQLite 引擎。
背景
当然,虚拟列表并不是什么新鲜事物。 您可以将其视为一个模型 - 视图系统,列表视图是视图,数据库是模型。 数据是按需获取的,当用户滚动列表(或调整列表大小时)。
在 AlphaView 中,代码被分离成两个类
cached_alpha_view
alpha_view
alpha_view
是一个经典的 WTL 列表视图,它处理 Windows 消息和通知。 单击列会按该列对数据进行排序(但所有工作都由 SQLite 完成)。 cached_alpha_view
使用 LVN_ODCACHEHINT
通知预取一块数据,使用 sqlite3_get_table
接口。 它还计算数据的大小和模式,以设置列表视图列。
使用代码
要在您的项目中使用 alpha_view
,只需包含 alpha_view.h 和 stringutil.h。 alpha_view
可以用作普通的 WTL ListViewCtrl
,它只需要一个 SQLite3 连接和要显示的表。 数据库连接是从 sqlite3_open
获得的。
struct sqlite3 *db; sqlite3_open(file_name, &db); //create a new control with a db connexion and a table name alpha_view * v = new alpha_view(db,table_name); //then creates the window. v->Create(*this,rcDefault,wtable_name, WS_CHILD| WS_TABSTOP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | LVS_REPORT | WS_HSCROLL| WS_VSCROLL | WS_BORDER | LVS_SHOWSELALWAYS | LVS_OWNERDATA ,0,0);
当然,不要忘记 LVS_OWNERDATA
。 拥有窗口也应该反映通知消息。 还要为排序箭头提供一个位图,src 目录中有一个。
关注点
在示例应用程序中,我使用一个分隔器,左侧窗格中有一个树视图,右侧有一个选项卡控件。 当用户打开一个 SQLite 文件时,树视图会填充所有表。 当用户双击选择一个表时,会创建一个新的 alpha_view
并将其插入到新的选项卡索引中。 从那里,所有操作都由 alpha_view
处理。
此类也应该在 Windows CE/PocketPC 上运行。
提供的内容
一个用于测试代码的可执行文件(带有 SQLite 的 400L!):alphaview.exe。 它应该按原样运行。 示例 SQLite3 数据库:nwind.db,以及一个示例 VC6 项目(您将需要调整到 wtl80 的路径)也包含在内。 SQLite3 在一个 C 文件中提供。 但您当然可以使用官方发行版。
历史
- 首次发布。