wx Yield()返回什么?这与我的仪表未更新的原因有关吗?

时间:2014-10-27 15:06:28

标签: c++ wxwidgets

我正在使用wxwidgets,我有一个这样的代码:

    gaugeProgressFolders->SetRange(folderList.size());
    for(int i=0;i<folderList.size();i++)
    {
        ProcessOneSet(folderList[i]);
        gaugeProgressFolders->SetValue(i+1);          
        wxYield();
    }

wxYeild不会更新guauge。我想知道它为什么不起作用?

看看wxYield,我注意到它返回了一个bool,但没有关于它返回的文档。

为什么我的guauge没有更新以及如何修复它?

wxYield返回什么?

2 个答案:

答案 0 :(得分:1)

你没有说什么是gauProgressFolders。也许是wxGauge

在任何情况下,为什么你都希望wxYield能够神奇地更新显示?

您必须编写代码来更新显示。

假设你的代码有各种各样的东西,你可以这样写:

gaugeProgressFolders->SetRange(folderList.size());
for(int i=0;i<folderList.size();i++)
{
    ProcessOneSet(folderList[i]);
    gaugeProgressFolders->SetValue(i+1);          
    // wxYield();  Don't call this, it does nothing

    // force the window to be repainted RIGHT NOW.
    Refresh();
    Update();
}

为了提高效率和减少闪烁,您可能还会尝试以下操作

   // force the gauge to be repainted.
    gaugeProgressFolders->Refresh();
    gaugeProgressFolders->Update();

答案 1 :(得分:0)

也许回复有点迟,但我不认为wxYield()是您更新仪表的正确选择。也许试试:

gaugeProgressFolders->SetRange(folderList.size());
    for (int i = 0; i < folderList.size(); i++)
    {
        ProcessOneSet(folderList[i]);
        gaugeProgressFolders->SetValue(i+1);          
        this->Layout(); //this being your window/dialog/frame
    }

Layout()强制布局重绘。它对我来说过去很有用。