2016-05-04 6 views
2

В коде ниже ListCtrl будет не обновления пункта, если я не использую «Update()» после первого «Если» Conditon но будет обновляться, даже если нет никакого метода «Update()» называется после второго «If» conditon. Почему это? Мне просто интересно узнать, когда требуется 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 автоматически обновляет его до «Конец», когда ваша функция завершается.