Listcontrol neu zeichnen



  • Hi!
    Ich habe eine Dialog-Anwendung mit einem Ownerdata (virtuellen) Listcontrol in das ich dynamisch Datensätze reinlese. Geht auch alles prima.

    Frage: Wie kann ich meinem Listcontrol sagen, das es nach einem Requery bitte die neuen Daten auch darstellt? Wenn man mit einem beliebigen fremden Fenster über meine Anwendung "drüberwischt" sind die neuen Daten sofort sichtbar. 😞

    Unter anderem habe ich das probiert:

    CRect rc;
    m_RecordList.GetClientRect(&rc);
    InvalidateRect(&rc,TRUE);
    UpdateWindow();
    

    Funzt aber leider nicht.

    Habt Ihr 'ne Idee?

    Gruss Theo



  • UpdateData(TRUE);
    //your code goes here
    UpdateData(FALSE);



  • Was meinst Du denn damit??

    In der Zwischenzeit habe ich noch alles Mögliche versucht, aber ich kriege das Control irgendwie nicht neu gezeichnet. Normalerweise sollte UpdateWindow() doch OnPaint() auslösen oder?

    Gruss Theo



  • So, nun hab ich's doch noch gefunden! 😃
    Es lag an dem letzten Flag der Itemcount-Nachricht. Nach dem Requery auf mein DB-Recordset schick ich dem ListControl eine Nachricht über die Anzahl der gefundenen Einträge:

    m_RecordList.SendMessage(LVM_SETITEMCOUNT, (WPARAM)count, (LPARAM)LVSICF_NOINVALIDATEALL);
    

    Das letzte Flag bewirkt, dass nicht neu gezeichnet wird. Wenn die Nachricht aber wie folgt gesendet wird, dann wird auch brav gezeichnet:

    m_RecordList.SendMessage(LVM_SETITEMCOUNT, (WPARAM)count, (LPARAM)LVSICF_NOSCROLL);
    

    Gruss Theo


Anmelden zum Antworten