实现操作范围列表控件
默认情况下,列表控件有所有项目标准网格方式。 但是,另一个方法支持,操作范围,将列表项至矩形组。 有关实现操作范围列表控件的图像,请参见使用列表视图控件在 Windows SDK。
备注
,只有在列表控件在图标或小图标模式时,操作范围内可见。但是,所有当前操作范围中维护视图是否切换到该报表或列表模式。
操作范围可用于显示空的边框 (在左侧,顶部和/或正确项目),或者导致水平滚动条,将突出显示通常不一个。 另一个常见用途是创建项目可以移动或删除的多个操作范围。 此方法,您在一个视图可以创建具有不同的含义的区域。 用户可以通过将它们并类别项在不同的区域。 此示例是具有读写文件的区域和只读文件的另一个区域文件系统的视图。 如果文件项目将只读区域,它会自动将变为只读。 将文件从只读区域读/写区域将使文件读取/写入。
CListCtrl 用于创建提供了几个成员函数,并在托管操作范围列表控件。 GetWorkAreas 和 SetWorkAreas 检索和设置数组 CRect 对象 (或 RECT 结构),存储在当前实现的操作范围列表控件。 此外, GetNumberOfWorkAreas 检索操作范围的当前您的列表控件 (默认情况下,零开始)。
项目和操作 span
当操作范围创建时,操作范围内的项适合成员的方式。 同样,因此,如果项目将操作范围,它以适合其移动操作范围的成员。 如果项目不在任何操作范围之间切换,它自动与第一个 (索引 0) 操作范围的成员。 如果要创建项目并将其放置在特定操作范围内,需要创建该项目并移入所需操作大小与调用移动到 SetItemPosition。 下面的第二个的示例演示这一技术。
下面的示例在每个操作大小接近实现四个操作范围 (rcWorkAreas),使用一个 10 像素等于边框的大小,在列表控件 (m_WorkAreaListCtrl)。
CSize size;
size = m_WorkAreaListCtrl.ApproximateViewRect();
size.cx += 100;
size.cy += 100;
CRect rcWorkAreas[4];
rcWorkAreas[0].SetRect(0, 0, (size.cx/2) - 5, (size.cy/2) - 5);
rcWorkAreas[1].SetRect((size.cx/2) + 5, 0, size.cx, (size.cy/2) - 5);
rcWorkAreas[2].SetRect(0, (size.cy/2) + 5, (size.cx/2) - 5, size.cy);
rcWorkAreas[3].SetRect((size.cx/2) + 5, (size.cy/2) + 5, size.cx, size.cy);
//set work areas
m_WorkAreaListCtrl.SetWorkAreas(4, rcWorkAreas);
为 ApproximateViewRect 的调用在一个区域进行访问要求的估计总区域显示所有项目。 此估计然后分为四个区域并填充一个 5 像素边框。
下一个示例指定现有列表项给每个组 (rcWorkAreas) 并刷新控件视图 (m_WorkAreaListCtrl) 完成该效果。
// set insertion points for each work area
CPoint rgptWork[4];
for (int i = 0; i < 4; i++)
{
rgptWork[i].x = rcWorkAreas[i].left + 10;
rgptWork[i].y = rcWorkAreas[i].top + 10;
}
// now move all the items to the different quadrants
for (int i = 0; i < 20; i++)
{
m_WorkAreaListCtrl.SetItemPosition(i, rgptWork[i % 4]);
}
// force the control to rearrange the shuffled items
m_WorkAreaListCtrl.Arrange(LVA_DEFAULT);