VC MFC CListCtrl inserta una gran cantidad de datos y tiene problemas con el CListCtrl virtual.
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() p>
{
//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()
}
;