在清單控制項中實作工作區域
根據預設,清單控制項會以標準格線方式排列所有專案。 不過,支援另一種方法的工作區域,將清單專案排列成矩形群組。 如需實作工作區域的清單控制項影像,請參閱在 Windows SDK 中使用清單檢視控制項。
注意
只有在清單控制項處於圖示或小型圖示模式時,才會顯示工作區域。 不過,如果檢視切換至報表或清單模式,則會維護任何目前的工作區域。
工作區域可用來顯示空白框線(專案左上方和/或右邊),或導致水準捲軸在通常不會顯示時顯示。 另一個常見的用法是建立多個工作區域,以便移動或卸載專案。 使用此方法,您可以在具有不同意義的單一檢視中建立區域。 然後,使用者可以將專案放在不同的區域中來分類專案。 其中一個範例是檔案系統的檢視,其具有讀取/寫入檔案的區域,以及唯讀檔案的另一個區域。 如果檔案專案已移至唯讀區域,它會自動變成隻讀。 將檔案從唯讀區域移至讀取/寫入區域,會使檔案成為可讀寫的檔案。
CListCtrl
提供數個成員函式,可讓您在清單控制項中建立和管理工作區域。 GetWorkAreas 和 SetWorkAreas 會擷取並設定物件的陣列 CRect
(或 RECT
結構),以儲存清單控制項目前實作的工作區域。 此外, GetNumberOfWorkAreas 會擷取清單控制項目前的工作區域數目(預設為零)。
專案和工作區域
建立工作區時,位於工作區內的專案會成為其成員。 同樣地,如果專案移至工作區域,它就會成為其移動之工作區的成員。 如果專案不位於任何工作區域內,它會自動成為第一個 (索引 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);