共用方式為


在清單控制件中實作工作區域

根據預設,清單控件會以標準網格線方式排列所有專案。 不過,還有一種支援的方法,即將清單專案排列成矩形群組。 如需實作工作區域的清單控件影像,請參閱在 Windows SDK 中使用 List-View 控件。

備註

只有在清單控件處於圖示或小型圖示模式時,才會顯示工作區域。 不過,如果檢視切換至報表或清單模式,則會維護任何目前的工作區域。

工作區域可用來於項目左、上和/或右側顯示空白邊框,或在通常不會顯示水平捲動條的情況下,導致其顯示。 另一個常見的用法是建立多個工作區域,以便方便移動或拖放項目。 使用此方法,您可以在具有不同意義的單一檢視中建立區域。 然後,使用者可以將項目放在不同的區域中進行分類。 其中一個範例是文件系統的檢視,其具有讀取/寫入檔案的區域,以及只讀檔案的另一個區域。 如果檔案項目被移到唯讀區域,它會自動變成唯讀。 將檔案從只讀區域移至讀取/寫入區域,會使檔案成為可擦寫的檔案。

CListCtrl 提供數個成員函式,可讓您在清單控制件中建立和管理工作區域。 GetWorkAreasSetWorkAreas 會擷取並設定陣列的 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);

另請參閱

使用 CListCtrl
控制項