既定では、リスト コントロールは標準のグリッドのメソッドのすべての項目を配置します。ただし、四角形のグループにリスト項目を配置する別のメソッドは、作業領域のサポートされます。作業区分を実装するリスト コントロールのイメージについては、を参照してください。リストビュー コントロールを Windows SDKで使用します。
[!メモ]
作業領域は、リスト コントロールでアイコンまたは小さいアイコンのモードのときにのみ表示されます。ただしビューがレポートまたはリストのモードに切替えられれば、現在の作業領域が保持されます。
作業領域が空の境界線を表示するには、 (項目の左に、上部、または右)を使用することも、に 1 つが通常はない場合に水平スクロール バーが表示されます。もう一つの一般的な用途は、項目を移動するか、ドロップできる複数の作業領域を作成します。このメソッドによって、一つのビューで異なる意味を持つ領域を作成できます。ユーザーは、個々の領域に配置することにより、項目を分類することもできます。この例は、読み取り/書き込みファイルの領域および読み取り専用ファイルの個別の領域があるファイル システムのビューです。ファイルの項目が読み取り専用領域に移動されている場合、自動的に読み取り専用になります。読み取り/書き込み領域に読み取り専用領域からファイルを移動すると、ファイルの読み取り/書き込みを行います。
CListCtrl はリスト コントロールの作成と管理の作業領域に複数のメンバー関数を提供します。GetWorkAreas と SetWorkAreas はリスト コントロールの現在の実装作業領域を格納する RECT の構造体)取得し、プロパティ、または CRect のオブジェクトの配列 (。また、 GetNumberOfWorkAreas はリスト コントロール (既定では、ゼロ)の作業領域の現在の数を取得します。
項目と作業領域
作業領域が作成されると、作業領域内にある項目には、のメンバーになります。同様に、項目が作業領域に移動する場合は、移動された作業領域のメンバーになります。項目がどの作業領域内に存在しない場合は、自動的に最初の (インデックス 0)作業領域のメンバーになります。項目を作成し、特定の作業領域内に配置させる場合は、項目を作成し、 SetItemPositionに呼び出しと目的の作業領域に移動する必要があります。2 番目の例では、のこの手法を示します。
次の例は、リスト コントロール (m_WorkAreaListCtrl)の各作業領域の周囲に 4 個の作業領域 (幅 10 ピクセルの境界線との同じサイズのrcWorkAreas)を実装します。
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 への呼び出しは 1 回の領域のすべての項目を表示するために必要な全域の推論を取得するために行われました。この見積もりは 4 か所で、分割し、幅 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);