自定义绘制列表框控件实现

在开发Pocket PC2002应用程序时,尝试实现一个自定义绘制的列表框控件,以便在每行列表的开头显示一个小图标。类似于Davide Calabro在他的文章中展示的CListBoxST,这是一个从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头文件。

C++ 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函数基于Uwe Keim的文章"Selection Highlighting of an Entire Row"。使用了Uwe的文章中的原始DrawItem函数,并做了一些简单的修改。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485