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

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

本文关键字:CListCtrl Update 不需要 在下面 为什么      更新时间:2023-10-16

在下面的代码中,如果我在第一个"if"条件之后不使用"update()",ListCtrl将不会更新项,但即使在第二个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? */
       }
 }

Update会使更改立即显示在屏幕上。如果您不调用它,Windows会在下次运行消息循环时(在MyFunction退出后)自动将更改显示在屏幕上。这就是为什么在将其更改为"结束"之前,您需要将其称为"开始"。当您的功能退出时,Windows会自动将其更新为"结束"。

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

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

根据MSDN(CListCtrl::更新):

强制列表视图控件重新绘制nItem指定的项。

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