2016-05-04 32 views
2

在的ListCtrl下面的代碼將更新的項目,如果我不使用「更新()」的第一後「如果」 conditon但即使有所謂的沒有「更新()」方法將更新在第二個「If」條件之後。爲什麼是這樣?我只是想知道Update()何時需要,什麼時候不需要!爲什麼在下面的例子中不需要CListCtrl Update()?

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? */ 
     } 
} 

回答

0

你怎麼能回答的問題Why X is true?如果X是假的???

當你設置一些項目的文本 - 列表控件使相應的區域無效;最終,當談到繪畫時,它會重新繪製新的文字。

根據MSDN (CListCtrl::Update)

部隊列表視圖控件重繪由nItem域指定的項目。

因此您可以立即看到結果。

+0

我想你誤解了這個問題。 –

4

Update導致更改立即放在屏幕上。如果您不調用它,Windows會在您的消息循環下一次運行時(在MyFunction退出後)自動將更改顯示在屏幕上。這就是爲什麼您需要調用它才能看到「開始」,然後再將其更改爲「結束」。當你的函數退出時,Windows會自動將它更新爲「End」。

相關問題