Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
De forma predeterminada, un control de lista organiza todos los elementos de forma estándar. Sin embargo, se admite otro método, áreas de trabajo, que organizan los elementos de lista en grupos rectangulares. Para obtener una imagen de un control de lista que implemente áreas de trabajo, consulte Uso de controles de List-View en Windows SDK.
Nota:
Las áreas de trabajo solo son visibles cuando el control de lista está en modo icono o icono pequeño. Sin embargo, las áreas de trabajo actuales se mantienen si la vista se cambia al modo de informe o lista.
Las áreas de trabajo se pueden usar para mostrar un borde vacío (en la parte izquierda, superior o derecha de los elementos) o hacer que se muestre una barra de desplazamiento horizontal cuando normalmente no habría una. Otro uso común es crear varias áreas de trabajo a las que se pueden mover o quitar elementos. Con este método, podría crear áreas en una sola vista que tengan significados diferentes. Después, el usuario podría clasificar los elementos colocándolos en un área diferente. Un ejemplo de esto sería una vista de un sistema de archivos que tiene un área para archivos de lectura y escritura y otra área para archivos de solo lectura. Si un elemento de archivo se movió al área de solo lectura, se convertirá automáticamente en de solo lectura. Mover un archivo del área de solo lectura al área de lectura y escritura haría que el archivo fuera de lectura y escritura.
CListCtrl proporciona varias funciones miembro para crear y administrar áreas de trabajo en el control de lista. GetWorkAreas y SetWorkAreas recuperan y establecen una matriz de CRect objetos (o RECT estructuras), que almacenan las áreas de trabajo implementadas actualmente para el CRect control de lista. Además, GetNumberOfWorkAreas recupera el número actual de áreas de trabajo para el control de lista (de forma predeterminada, cero).
Elementos y áreas de trabajo
Cuando se crea un área de trabajo, los elementos que se encuentran dentro del área de trabajo se convierten en miembros de él. Del mismo modo, si un elemento se mueve a un área de trabajo, se convierte en miembro del área de trabajo a la que se movió. Si un elemento no se encuentra dentro de ningún área de trabajo, se convierte automáticamente en miembro del primer área de trabajo (índice 0). Si desea crear un elemento y colocarlo dentro de un área de trabajo específica, deberá crear el elemento y, a continuación, moverlo al área de trabajo deseada con una llamada a SetItemPosition. En el segundo ejemplo siguiente se muestra esta técnica.
En el ejemplo siguiente se implementan cuatro áreas de trabajo (rcWorkAreas), de igual tamaño con un borde de 10 píxeles de ancho alrededor de cada área de trabajo, en un control de lista (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);
La llamada a ApproximateViewRect se realizó para obtener una estimación del área total necesaria para mostrar todos los elementos de una región. Esta estimación se divide en cuatro regiones y se rellena con un borde de 5 píxeles.
En el ejemplo siguiente se asignan los elementos de lista existentes a cada grupo (rcWorkAreas) y se actualiza la vista de control (m_WorkAreaListCtrl) para completar el efecto.
// 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);