Pregunta

Estoy usando un CListCtrl en la vista de iconos, pero se desplaza horizontalmente:

1 3 5 7 -->
2 4 6 8 -->

Prefiero que se desplace horizontalmente:

1 2
3 4
5 6
| |
V V

¿Hay alguna manera de hacer esto?

¿Fue útil?

Solución

Cambie el estilo de alineación en el diseñador de izquierda a arriba.

Otros consejos

Parece que resolví el problema usando una vista de 'Informe'. A través del Diseñador VS, esto significa cambiar el estilo 'Ver' a Informe, lo que da como resultado el control dado el atributo LVS_REPORT en el archivo .RC. Tenga en cuenta que esto es equivalente a llamar CListCtrl :: SetView (LV_VIEW_DETAILS) en el código. Sin embargo, esto no es suficiente. También es necesario crear una columna si aún no tiene una con un par de líneas de código:

m_lstScenarios.InsertColumn(0, L"NO HEADER");
m_lstScenarios.SetColumnWidth(k_nListColScenario, LVSCW_AUTOSIZE);

Si no desea el encabezado de la columna, configure el LVS_NOCOLUMNHEADER en el Diseñador a través del estilo 'Sin encabezado de columna'.

En el editor de diálogos de Visual Studio, asegúrate de tener un " Control de lista, " no un " Cuadro de lista. "

En la lista de propiedades del editor de diálogos de Visual Studio, establezca " Sin encabezado de columna " a Verdadero y " Ver " para reportar. (La configuración de " Alineación " A la izquierda no tiene ningún efecto en el modo Informe).

En OnInitDialog () , haga lo siguiente (después de llamar a su superclase OnInitDialog () ):

  CListCtrl* plistError = (CListCtrl*) GetDlgItem( IDC_ERROR );
  plistError->InsertColumn( 0, "" );
  plistError->SetColumnWidth( 0, LVSCW_AUTOSIZE_USEHEADER );

De hecho, eso parece dar un tamaño máximo automático del ancho inicial con el que se crea el control. Las cadenas se muestran truncadas con puntos suspensivos en ese punto. Ampliar la ventana no ayuda.

Para corregir eso, agregue un método OnSize () a su subclase CDialog que nuevamente le recuerde a la lista que es más amplia. (Esto supone que ampliar la ventana es lo que permitiría que CListCtrl muestre más texto. Si tiene algún otro medio, como un botón, intente esta llamada SetColumnWidth () donde lo estás haciendo).

 WinProgress::OnSize() {
    CListCtrl* plist = (CListCtrl*) GetDlgItem( IDC_ERROR );
    plist->SetColumnWidth( 0, LVSCW_AUTOSIZE_USEHEADER );

Luego, puede agregar nuevas filas al final de la lista con un código como:

  CListCtrl* plist = (CListCtrl*) GetDlgItem( IDC_ERROR );
  int iCount = plist->GetItemCount();

  plist->InsertItem( iCount, "Next Item" );

Los elementos demasiado anchos para la lista mostrarán puntos suspensivos al principio. Cuando cambia el tamaño de la ventana aunque sea ligeramente, los elementos de la lista de ancho a tamaño completo y una barra de desplazamiento horizontal aparecen si es necesario. No son exactamente 10/10 en lo que a apariencia se refiere, pero incluso los programadores de GUI experimentados probablemente no lo notarán.

En el control de lista, para mostrar el contenido con la imagen en una sola columna con la barra de desplazamiento vertical .add siguiente código, En la función PreCreateWindow, agregue la siguiente línea cs.style | = (LVS_REPORT | LVS_NOCOLUMNHEADER); y en la función OnIntialUpdate agregue la siguiente línea,     fileList.InsertColumn (0, " ", LVCFMT_LEFT | LVCFMT_IMAGE, 120, -1);     ShowScrollBar (SB_VERT, 1); después de esto, donde quiera que quiera insertar datos en la lista, puede asegurarse de configurar imagelist y luego insertar datos usando insertitem, por ejemplo:    fileList, insertitem (0, " India ", 1); donde 1- > es el índice de la imagen en imagelist.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top