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

时间:2016-05-04 18:20:55

标签: c++ mfc clistctrl

在下面的代码中,如果我在第一次“如果”条件之后不使用“更新()”,则ListCtrl将更新项目,但将即使在第二个“如果”条件之后没有调用“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? */
       }
 }

2 个答案:

答案 0 :(得分:4)

Update会立即将更改放在屏幕上。如果您不打电话,Windows会在您的消息循环下次运行时(在MyFunction退出后)自动将更改放在屏幕上。这就是为什么在将其更改为&#34;结束&#34;之前需要调用它来查看&#34;开始&#34 ;. Windows会自动将其更新为&#34;结束&#34;当你的功能退出时。

答案 1 :(得分:0)

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

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

根据MSDN (CListCtrl::Update)

  

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

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