共用方式為


實作工作區,在清單控制項裡

根據預設,清單控制項排列標準格線樣式中的所有項目。 不過,另一個支援的方法,工作區將清單項目排列到矩形群組。 實作工作區的清單控制項的影像,請參閱使用中的清單檢視控制項Windows SDK。

注意事項注意事項

只有當清單控制項是以圖示或小圖示模式時,工作區才看得見。不過,如果檢視切換到報告或清單模式,會保留任何目前的工作區。

工作區可用來顯示空的框線 (在左邊、 上面和/或項目右邊),或導致通常不會有一項時所顯示的水平捲軸列。 另一種用途是建立多個工作區的項目一起移動或卸除。 使用這個方法,您可以有不同意義的單一檢視中建立區域。 使用者無法再將項目分類放置在不同的區域。 舉例而言,這是有讀/寫檔案的區域以及唯讀檔案的另一個區域的檔案系統的檢視。 如果檔案被移到唯讀區,它會自動變成唯讀。 將檔案從唯讀區移到讀/寫區域會使檔案讀取/寫入。

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

概念

控制項 (MFC)