Red de conocimiento informático - Problemas con los teléfonos móviles - VC MFC CListCtrl inserta una gran cantidad de datos y tiene problemas con el CListCtrl virtual.

VC MFC CListCtrl inserta una gran cantidad de datos y tiene problemas con el CListCtrl virtual.

1. Utilice SetRedraw para deshabilitar el rediseño de la ventana y luego reanude el rediseño de la ventana una vez completada la operación

m_ctlList.SetRedraw(FALSE);

// La siguiente es la operación para actualizar los datos;

//......

//Reanudar el redibujado de la ventana

m_ctlList.SetRedraw(TRUE);

2. Utilice LockWindowUpdate Deshabilite el redibujado de ventanas y utilice UnlockWindowUpdate para reanudar el redibujado de ventanas una vez completada la operación

m_ctlList.SetRedraw(TRUE);

Utilice LockWindowUpdate(LockWindowUpdate();

//La siguiente es la operación de actualización de datos

//......

//Reanudar el redibujado de la ventana

m_ctlList.UnlockWindowUpdate () ;

3. Utilice el doble buffer interno de ListCtrl

m_ctlLisit.SetExtendedStyle(m_ctlLisit.GetExtendedStyle()|LVS_EX_DOUBLEBUFFER);

VC6 no define la macro LVS_EX_DOUBLEBUFFER, el usuario puede presionar la siguiente personalización del método:

#define LVS_EX_DOUBLEBUFFER 0x00010000

4. OWNERDATA o seleccionar la casilla de verificación "Datos del propietario" en la página "Más estilos" de la propiedad ListCtrl. .

En segundo lugar, se debe enviar el mensaje LVN_GETDISPINFO;

void OnGetdispinfoList(NMHDR* pNMHDR, LRESULT* pResult)

{

LV_DISPINFO * pDispInfo = (LV_DISPINFO*)pDispInfo = (LV_DISPINFO*)pDispInfo = (LV_DISPINFO*)pDispInfo = (LV_DISPINFO*) DISPINFO*)pNMHDR;

LV_ITEM *pItem = amp (pDispInfo)-gt; ; /p>

char szText[128] = {0};

if (pItem-gt; máscara amp; LVIF_TEXT)

{

/ Hacer que los datos del buffer correspondan a los elementos del formulario

//m_ArrayBuff es una matriz bidimensional

/Definido de la siguiente manera int m_ArrayBuff[2048][4];

_stprintf(szText, _T("d"), m_ ArrayBuff[pItem-gt;iItem][pItem-gt;iSubItem]);

pItem-gt;pszText = szText

}

*pResult = 0;

}

Finalmente, se genera un buffer de datos

void Insertdata()

{

//Eliminar datos anteriores

m_ctlList.SetItemCountEx(0);

m_ctlList.Invalidate();

m_ctlList..UpdateWindow();

srand( (unsigned)time( NULL ));

//genera un nuevo búfer de datos

int nItemCount = 2048;

para (int i = 0; i lt; nItemCount; i )

{

para ( int k = 0; k lt; 4 k )

{

m_ArrayBuff[i][k] = rand()2048

}< / p>

}

if (nItemCount lt; 2)

m_ctlList.SetItemCountEx(1)

else

m_ctlList.SetItemCountEx(nItemCount);

m_ctlList.Invalidate()

}

;