tengo samsung porque nada memoria llena liberar interno interna insuficiente falso espacio como celular borrar almacenamiento c++ winapi user-interface mfc clistctrl

c++ - samsung - CListCtrl muestra puntos suspensivos a pesar de tener mucho espacio(solo Win2008 y Win7)



memoria interna llena y no tengo nada (4)

Estoy usando un CListCtrl para mostrar algunos elementos con iconos en el modo ListView. La mayoría de las veces solo hay un elemento en la lista con mucho espacio a la derecha, pero en mi sistema Win2008 (o Win7) trunca el texto usando puntos suspensivos (por ejemplo, "Tanque" se trunca en "Ta ...") . Esto no ocurre con todos los datos (incluso algunas cadenas más largas funcionan), sino repetidamente con el ejemplo "Tanque". También en un sistema WinXP funciona bien, siempre.

La vista de lista se crea a través de un archivo rc con

CONTROL "List2",IDC_LIST,"SysListView32",LVS_LIST | WS_BORDER | WS_TABSTOP,320,27,195,38

entonces es instanciado

myListCtrl.SubclassDlgItem( IDC_LIST, this ); myListCtrl.ModifyStyle(LVS_OWNERDRAWFIXED, LVS_SHAREIMAGELISTS | LVS_SINGLESEL | LVS_SHOWSELALWAYS); ListView_SetBkColor(myListCtrl.m_hWnd,PMAINFRM->GetColor(IDCOLOR_LI_BKG)); ListView_SetTextBkColor(myListCtrl.m_hWnd,PMAINFRM->GetColor(IDCOLOR_LI_BKG)); myListCtrl.SetImageList(PMAINFRM->GetImageList(IDICO_16),LVSIL_NORMAL); myListCtrl.SetImageList(PMAINFRM->GetImageList(IDICO_16),LVSIL_SMALL);

Estoy insertando solo 1 columna con el siguiente formato:

LV_COLUMN lvc; lvc.mask = LVCF_FMT | LVCF_SUBITEM; lvc.fmt = LVCFMT_LEFT; lvc.iSubItem = 0; myListCtrl.InsertColumn(0,&lvc);

Y los datos se insertan

int index = 0; int nItem = m_lstClass.InsertItem(index,(LPTSTR) strLabel, iIconID)); myListCtrl.SetItemData( nItem, (DWORD)index); myListCtrl.SetItemState( nItem, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);

He intentado

myListCtrl.SetColumnWidth(column, LVSCW_AUTOSIZE_USEHEADER);

tanto como

myListCtrl.SetColumnWidth(column, LVSCW_AUTOSIZE);

Y un

myListCtrl.SetExtendedStyle(LVS_EX_AUTOSIZECOLUMNS);

tampoco hizo el truco.

¿Algunas ideas?

Micha


Tuve este problema y creo que finalmente encontré la respuesta. El problema en mi caso era que el diálogo tenía una fuente especificada en este estilo:

IDD_DIALOG_TurnOnOffRecords DIALOG 0, 0, 376, 263 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Turn on off records" FONT 8, "@Arial Unicode MS" . . .

Si DS_SETFONT la línea FONT y el indicador CListCtrl , CListCtrl comenzó a mostrar el texto sin truncamiento nuevamente.

Mi suposición es que está usando diferentes fuentes para medir el ancho del texto y hacer el dibujo, esto está causando el truncamiento.


Esto podría ayudarte. Llame a esta función después de haber insertado todas sus columnas y filas.

void SizeAllColumns(CListCtrl& list) { CHeaderCtrl* pHeader = list.GetHeaderCtrl(); ASSERT(pHeader); if (pHeader) { // Turn off redraw until the columns have all been resized list.SetRedraw(FALSE); for (int iCurrCol = 0; iCurrCol < pHeader->GetItemCount(); iCurrCol++) { list.SetColumnWidth(iCurrCol, LVSCW_AUTOSIZE); int nCurrWidth = list.GetColumnWidth(iCurrCol); list.SetColumnWidth(iCurrCol, LVSCW_AUTOSIZE_USEHEADER); int nColHdrWidth = list.GetColumnWidth(iCurrCol); list.SetColumnWidth(iCurrCol, max(nCurrWidth, nColHdrWidth)); } // Now that sizing is finished, turn redraw back on and // invalidate so that the control is repainted list.SetRedraw(TRUE); list.Invalidate(); } }


Estaba tirando de mi pelo en este, ya que tenía 2 CListCtrl idénticos en el mismo cuadro de diálogo y uno mostraba las elipsis y el otro no.

El problema en mi caso resultó ser que los elementos que estaba insertando tenían un carácter de nueva línea anexa (10) como resultado de leer los elementos del archivo con _fgetts (). El retorno de carro muestra el mismo problema.

La longitud del elemento no importaba; si tenía un carácter de línea nueva, los dos últimos caracteres se quitarían y se reemplazarían con puntos suspensivos (aunque se mostrarían al menos 1 carácter). El problema solo se manifestó en Vista / Windows 7 y los servidores equivalentes 2008, 2008 R2. Imagino que Windows 8 y Server 2012 también lo muestran, pero aún no lo han probado.

¡Despojar al personaje de la nueva línea muestra el ítem en toda su gloria!


En mi caso aparecieron puntos suspensivos al final de cada fila después de cambiar el tamaño de la lista. La llamada a "SetRedraw (falso)" antes de completar la lista y "SetRedraw (verdadero)" para finalizar la finalización de la lista de verificación (la solución de Tom Archer) fue la solución.