CMFCHeaderCtrl 类
CMFCHeaderCtrl
类支持对标头控件的多个列进行排序。
语法
class CMFCHeaderCtrl : public CHeaderCtrl
成员
公共构造函数
名称 | 描述 |
---|---|
CMFCHeaderCtrl::CMFCHeaderCtrl | 构造 CMFCHeaderCtrl 对象。 |
CMFCHeaderCtrl::~CMFCHeaderCtrl |
析构函数。 |
公共方法
名称 | 描述 |
---|---|
CMFCHeaderCtrl::EnableMultipleSort | 启用或禁用当前标头控件的多列排序模式。 |
CMFCHeaderCtrl::GetColumnState | 指示列是未排序,还是按升序或降序排序。 |
CMFCHeaderCtrl::GetSortColumn | 检索标头控件中第一个排序列的从零开始的索引。 |
CMFCHeaderCtrl::GetThisClass |
由框架用于获取指向与此类类型关联的 CRuntimeClass 对象的指针。 |
CMFCHeaderCtrl::IsAscending | 指示标头控件中的任何列是否按升序排序。 |
CMFCHeaderCtrl::IsDialogControl | 指示当前标头控件的父窗口是否为对话框。 |
CMFCHeaderCtrl::IsMultipleSort | 指示当前标头控件是否处于多列排序模式。 |
CMFCHeaderCtrl::RemoveSortColumn | 从排序列列表中删除指定的列。 |
CMFCHeaderCtrl::SetSortColumn | 设置标头控件中指定列的排序顺序。 |
受保护方法
名称 | 描述 |
---|---|
CMFCHeaderCtrl::OnDrawItem | 由框架调用以绘制标头控件列。 |
CMFCHeaderCtrl::OnDrawSortArrow | 由框架调用以绘制排序箭头。 |
CMFCHeaderCtrl::OnFillBackground | 由框架调用以填充标头控件列的背景。 |
示例
以下示例演示如何构造 CMFCHeaderCtrl
类的对象,以及如何为当前标头控件启用多列排序模式。
CMFCHeaderCtrl *headerCtrl = new CMFCHeaderCtrl();
headerCtrl->EnableMultipleSort();
备注
CMFCHeaderCtrl
类在标头控件列上绘制排序箭头,以指示已对该列进行排序。 如果可以同时对父列表控件(CMFCListCtrl 类)中的一组列进行排序,请使用多列排序模式。
继承层次结构
要求
标头:afxheaderctrl.h
CMFCHeaderCtrl::CMFCHeaderCtrl
构造 CMFCHeaderCtrl
对象。
CMFCHeaderCtrl::CMFCHeaderCtrl()
注解
此构造函数将以下成员变量初始化为指定值:
成员变量 | 值 |
---|---|
m_bIsMousePressed |
FALSE |
m_bMultipleSort |
FALSE |
m_bAscending |
TRUE |
m_nHighlightedItem |
-1 |
m_bTracked |
FALSE |
m_bIsDlgControl |
FALSE |
m_hFont |
Null |
CMFCHeaderCtrl::EnableMultipleSort
启用或禁用当前标头控件的多列排序模式。
void EnableMultipleSort(BOOL bEnable=TRUE);
参数
bEnable
[in] 为 TRUE 则启用多列排序模式;为 FALSE 则禁用多列排序模式,并从排序列列表中删除任何列。 默认值为 TRUE。
备注
使用此方法启用或禁用多列排序模式。 如果标头控件处于多列排序模式,则两列或更多列可以参与排序。
CMFCHeaderCtrl::GetColumnState
指示列是未排序,还是按升序或降序排序。
int GetColumnState(int iColumn) const;
参数
iColumn
[in] 列的从零开始的索引。
返回值
指示指定列的排序状态的值。 下表列出了可能的值:
值 | 说明 |
---|---|
-1 | 已按降序排序。 |
0 | 未排序。 |
1 | 已按升序排序。 |
备注
CMFCHeaderCtrl::GetSortColumn
检索标头控件中第一个排序列的从零开始的索引。
int GetSortColumn() const;
返回值
已排序列的索引;如果未找到已排序列,则返回 -1。
备注
如果标头控件处于多列排序模式,并且以调试模式编译了应用程序,则此方法断言并建议改用 CMFCHeaderCtrl::GetColumnState 方法。 如果标头控件处于多列排序模式,并且以零售模式编译了应用程序,则此方法返回 -1。
CMFCHeaderCtrl::IsAscending
指示标头控件中的任何列是否按升序排序。
BOOL IsAscending() const;
返回值
如果标头控件中的任何列按升序排序,则返回 TRUE;否则返回 FALSE。
注解
此方法返回的值用于在标头控件项上显示适当的排序箭头。 使用 CMFCHeaderCtrl::SetSortColumn 方法设置排序顺序。
CMFCHeaderCtrl::IsDialogControl
指示当前标头控件的父窗口是否为对话框。
BOOL IsDialogControl() const;
返回值
如果当前标头控件的父窗口为对话框,则返回 TRUE;否则返回 FALSE。
CMFCHeaderCtrl::IsMultipleSort
指示当前标头控件是否处于多列排序模式。
BOOL IsMultipleSort() const;
返回值
如果启用了多列排序模式,则返回 TRUE;否则返回 FALSE。
备注
使用 CMFCHeaderCtrl::EnableMultipleSort 方法启用或禁用多列排序模式。 如果标头控件处于多列排序模式,则两列或更多列可以参与排序。
CMFCHeaderCtrl::OnDrawItem
由框架调用以绘制标头控件列。
virtual void OnDrawItem(
CDC* pDC,
int iItem,
CRect rect,
BOOL bIsPressed,
BOOL bIsHighlighted);
参数
pDC
[in] 指向设备上下文的指针。
iItem
[in] 要绘制的项的从零开始的索引。
rect
[in] 要绘制的项的边框。
bIsPressed
[in] 为 TRUE 则绘制处于按下状态的项;否则为 FALSE。
bIsHighlighted
[in] 为 TRUE 则绘制处于突出显示状态的项;否则为 FALSE。
CMFCHeaderCtrl::OnDrawSortArrow
由框架调用以绘制排序箭头。
virtual void OnDrawSortArrow(
CDC* pDC,
CRect rectArrow);
参数
pDC
[in] 指向设备上下文的指针。
rectArrow
[in] 排序箭头的边框。
CMFCHeaderCtrl::OnFillBackground
由框架调用以填充标头控件列的背景。
virtual void OnFillBackground(CDC* pDC);
参数
pDC
[in] 指向设备上下文的指针。
备注
CMFCHeaderCtrl::RemoveSortColumn
从排序列列表中删除指定的列。
void RemoveSortColumn(int iColumn);
参数
iColumn
[in] 要删除列的从零开始的索引。
CMFCHeaderCtrl::SetSortColumn
设置标头控件中指定列的排序顺序。
void SetSortColumn(
int iColumn,
BOOL bAscending=TRUE,
BOOL bAdd=FALSE);
参数
iColumn
[in]标头控件列的从零开始的索引。 如果此参数小于零,此方法将从排序列列表中删除所有列。
bAscending
[in ]指定 iColumn 参数指定的列的排序顺序。 为 TRUE 则设置为升序顺序;为 FALSE 则设置为降序顺序。 默认值为 TRUE。
bAdd
[in] 为 TRUE 则设置 iColumn 参数指定的列的排序顺序。
如果当前标头控件处于多列排序模式,此方法会将指定的列添加到排序列列表。 使用 CMFCHeaderCtrl::EnableMultipleSort 设置多列排序模式。
如果未设置多列排序模式,并且此方法在调试模式下编译,则此方法断言。 如果未设置多列排序模式,并且此方法在零售模式下编译,则此方法首先从排序列列表中删除所有列,然后将指定的列添加到列表中。
如果为 FALSE 则首先从排序列列表中删除所有列,然后将指定的列添加到列表中。 默认值是 FALSE。
备注
使用此方法设置列的排序顺序。 如有必要,此方法会将列添加到排序列列表。 标头控件使用排序顺序绘制向上或向下点的排序箭头。