2016-05-04 4 views
2

Im Code unter dem ListCtrl wird nicht Update das Element, wenn ich verwenden „Update()“ nicht nach dem ersten „If“ conditon aber wird aktualisiert, auch wenn es keine „Update()“ Methode wird aufgerufen, nach dem zweiten "If" conditon. Warum ist das? Ich bin nur neugierig zu wissen, wann Update() notwendig ist und wann nicht!Warum CListCtrl Update() im folgenden Beispiel nicht notwendig?

class MyDialog() 
    { 
    public: 
     void MyFunction(); 
    private: 
     CListCtrl myListControl; 
    } 

    void MyDialog::Myfunction() 
    { 
     bool bCondition; 
     for (auto i = 0, i < myListControl.GetItemCount(); ++i) 
     { 
     auto n = myListControl.SetItemText(i, 1, "Start"); 
     if (n) 
      myListControl.Update(i); 
     /*Update() is required here */ 

     EvaluateCondition(bConditon); 

     if(bConditon) 
      myListControl.SetItemText(i, 1, "End"); 
     /* Why is Update() ***Not*** required here? */ 
     } 
} 

Antwort

0

Wie können Sie beantworten Fragen Why X is true? wenn X falsch ???

Wenn Sie den Text eines Elements festlegen - das Listensteuerelement macht den entsprechenden Bereich ungültig; Wenn es schließlich zum Malen kommt, wird es den neuen Text neu zeichnen.

Nach MSDN (CListCtrl::Update):

Kräfte der Listenansicht das Element von nItem angegeben neu zu zeichnen.

So können Sie das Ergebnis sofort sehen.

+0

Ich denke, Sie haben die Frage falsch gelesen. –

4

Update bewirkt, dass die Änderung sofort auf dem Bildschirm angezeigt wird. Wenn Sie es nicht aufrufen, überträgt Windows die Änderung automatisch auf dem Bildschirm, wenn Ihre Nachrichtenschleife als nächstes ausgeführt wird (nachdem Ihre MyFunction beendet wird). Deshalb müssen Sie es aufrufen, um "Start" zu sehen, bevor Sie es in "Ende" ändern. Windows aktualisiert es automatisch auf "Ende", wenn Ihre Funktion beendet wird.

Verwandte Themen