为什么在下面的示例中不需要 CListCtrl Update()?

Why CListCtrl Update() not necessary in the example below?

在下面的代码中,如果我在 first 之后不使用 "Update()" not 更新项目 "If" 条件,但即使在第二个 "If" 条件 之后没有调用 "Update()" 方法, 也会更新。为什么是这样?我只是想知道什么时候需要 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? */
       }
 }

如果 X 为假,你如何回答问题 Why X is true????

当您设置某些项目的文本时-列表控件使相应的区域无效;最终,当涉及到绘画时 - 它会重新绘制新文本。

根据MSDN (CListCtrl::Update)

Forces the list view control to repaint the item specified by nItem.

所以你可以立即看到结果。

Update 使更改立即显示在屏幕上。如果您不调用它,Windows 会在您的消息循环下次运行时(在您的 MyFunction 退出后)自动将更改显示在屏幕上。这就是为什么在将其更改为 "End" 之前需要调用它以查看 "Start" 的原因。当您的函数退出时,Windows 会自动将其更新为 "End"。