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

CCeListCtrlEx for Pocket PC 2002

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.71/5 (7投票s)

2003年5月15日

CPOL

2分钟阅读

viewsIcon

135377

downloadIcon

764

一个自绘列表控件,用于模拟单选列表框,并在每行开头显示一个小图标。

Sample Image - CCeListCtrlEx.jpg

引言

几周前,我尝试为我的 Pocket PC 2002 应用程序实现一个自绘列表框控件。我希望在列表框的每一行开头显示一个小图标,就像 Davide Calabro 在他的文章 CListBoxST, a CListBox derived control 中所做的那样。所以我决定使用一个简单的自绘列表框控件 (CListBox) 来实现这个目标。

当我发现 Windows CE 不支持列表框控件的自绘样式时,我非常沮丧。 因此,我一直在寻找另一种解决方案,并且找到了一个。我使用了一个简单的自绘列表控件 (CListCtrl) 的报告样式来模拟单选列表框,并在每行开头显示一个小图标。

我还添加了一些典型的列表框函数,例如 GetCurSelItemSetCurSelItem 来获取和设置当前选定的项目,以及一些将列表中的项目移动到另一个位置的函数。 所有这些函数都由 示例应用程序 使用,因此要获取更多信息,请查看 示例应用程序源代码

  • 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 中首次发布。

错误和评论

如果您有任何意见或发现任何错误,我很乐意听取并改进它。

© . All rights reserved.