Win32 SDK Gui编程系列之--ListView自绘OwnerDraw(续)

通过所有者绘制的列表视图(2)         

        所有者绘制列表视图的基础已在前一页中说明。本页将展示如何在所有者绘制列表视图中显示数据库表数据。
1、访问日志 正如在另一个页面中所述,本网站的访问日志目前是通过SQLite3数据库管理的。
        以下是上述程序执行的结果。为了有效管理大量记录,每个访问记录都被数字化。这样的数据并不以原始形式存在于关系数据库的表中。
Win32 SDK Gui编程系列之--ListView自绘OwnerDraw(续)_第1张图片
        通过执行下面红色显示的SQL语句(选择查询)来获取表log和表path的数据:

90:     sqlite3_open(LOGDB, &db);   // 打开数据库
91:     sql = "select count(*) as cnt,name from log,path 
                where log.pid=path.id group by pid order by cnt desc";
92:     sqlite3_exec(db, sql, callback, 0, &zErrMsg);
93:     sqlite3_close(db);

顺便说一下,通过SQL语句 "select count(*) from log;" 可以得到表log的记录数。
        截至2013年5月2日,这个值是532,394。在我平时使用的移动PC(1.83GHz, 2.0GB)上,执行上述红色查询的时间是2、3秒。当记录数达到几百万时,执行时间会成为问题。 我正在考虑更换电脑,这样几百万条记录应该没问题,但数千万条记录可能就不行了。 在这种情况下,解决方案总是不从所有原始日志中获取,而是例如按月汇总。 2. 所有者绘制的列表视图 要将列表视图设置为所有者绘制,需要在创建时的窗口样式中添加LVS_OWNERDRAWFIXED。 列的创建与标准列表视图相同。 由于不需要设置显示字符串,因此记录的创建比标准列表视图简单。但是,不能省略。

56: void onCreate(HWND hWnd) {
57:     int iCol, iRow;
58:     hList = CreateWindowEx(0, WC_LISTVIEW, NULL, 
59:                         WS_CHILD|WS_VISIBLE|LVS_REPORT|LVS_OWNERDRAWFIXED,
60:                         0, 0, 1, 1, hWnd, (HMENU)777, NULL, NULL);
61:     SendMessage(hList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_GRIDLINES);
62:     for (iCol = 0; iCol < NCOL; iCol++) {
63:         LVCOLUMN col = { LVCF_FMT|LVCF_TEXT|LVCF_WIDTH|LVCF_SUBITEM, 0,
64:                          iCol==0 ? 50 : iCol==1 ? 90 : 400

你可能感兴趣的:(Win32,SDK,Gui,C/C++,工具,C,windows,c++,开发语言,c语言)