CCeListCtrlEx for Pocket PC 2002






4.71/5 (7投票s)
一个自绘列表控件,用于模拟单选列表框,并在每行开头显示一个小图标。
引言
几周前,我尝试为我的 Pocket PC 2002 应用程序实现一个自绘列表框控件。我希望在列表框的每一行开头显示一个小图标,就像 Davide Calabro 在他的文章 CListBoxST, a CListBox derived control 中所做的那样。所以我决定使用一个简单的自绘列表框控件 (CListBox
) 来实现这个目标。
当我发现 Windows CE 不支持列表框控件的自绘样式时,我非常沮丧。 因此,我一直在寻找另一种解决方案,并且找到了一个。我使用了一个简单的自绘列表控件 (CListCtrl
) 的报告样式来模拟单选列表框,并在每行开头显示一个小图标。
我还添加了一些典型的列表框函数,例如 GetCurSelItem
和 SetCurSelItem
来获取和设置当前选定的项目,以及一些将列表中的项目移动到另一个位置的函数。 所有这些函数都由 示例应用程序 使用,因此要获取更多信息,请查看 示例应用程序 的 源代码。
int GetCurSelItem() const;
BOOL SetCurSelItem(int nIndex);
BOOL MoveItem(int nOldIndex, int nNewIndex);
BOOL MoveItemUp(int nIndex);
BOOL MoveItemDown(int nIndex);
BOOL MoveItemTop(int nIndex);
BOOL MoveItemBottom(int nIndex);
用法
自绘列表控件 (CCeListCtrlEx
) 的使用非常简单。只需将列表控件添加到您的对话框,并将类型为 CCeListCtrlEx
的成员变量(分配给列表控件)添加到您的对话框类。 不要忘记包含 *CeListCtrlEx.h* 头文件。
CCeListCtrlEx m_ctrlList;
在对话框的 OnInitDialog
函数中,创建一个图像列表并将其分配给列表控件。之后,您可以将一些项目(每行开头有一些小图标)添加到列表控件。
BOOL CListCtrlTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
...
// TODO: Add extra initialization here
...
// Create a image list and assign it to the list control
VERIFY(m_imageList.Create(IDB_BITMAP1, 16, 1, RGB(255, 0, 255)));
m_ctrlList.SetImageList(&m_imageList, LVSIL_SMALL);
// Insert some sample items
for (int n = 0; n < 10; n++)
{
CString str;
str.Format(_T("Item %d"), n);
m_ctrlList.InsertItem(n, str, n % 8);
}
...
return TRUE; // return TRUE unless you set the focus to a control
}
参考文献
我用于自绘列表控件的重写 DrawItem
函数基于 "Selection Highlighting of an Entire Row" 这篇文章,作者是 Uwe Keim。 我使用了 Uwe 文章中的原始 DrawItem
函数并进行了一些简单的更改。
为了模拟设置了 DT_END_ELLIPSIS
标志的桌面版本 DrawText
(Windows CE 不支持),我使用了 DrawTextEndEllipsis
函数,该函数最初由 Alexander Shargin 编写。 您可以在 http://www.pocketpcdn.com/qa/ellipsis_flag.html 找到此函数。
发布历史
- 2003 年 5 月 16 日
现在自动创建列表控件所需的列(感谢 João Paulo Figueira)。
- 2003 年 5 月 15 日
在 CodeProject 中首次发布。
错误和评论
如果您有任何意见或发现任何错误,我很乐意听取并改进它。