2016-12-06 15 views
1

我在Windows上使用wxProgressDialog。每當我更改對話框中的文本時,對話框會重新調整大小以最好地適應文本,這會導致經常重新調整對話框的大小,這看起來很糟糕。如何停止wxProgressDialog重新調整大小?

我試過SetMinSize和SetSizeHints,但這些似乎沒有效果。 SetSize也似乎不起作用。

(有關信息,該對話框顯示文件傳輸的進度。當每個文件傳輸,顯示其完整路徑。這些變化在很大程度上導致了持續的調整大小。)

我的代碼是基於該代碼從樣品:

static const int max = 100; 

wxProgressDialog dialog("Progress dialog example", 
         // "Reserve" enough space for the multiline 
         // messages below, we'll change it anyhow 
         // immediately in the loop below 
         wxString(' ', 100) + "\n\n\n\n", 
         max, // range 
         this, // parent 
         wxPD_CAN_ABORT | 
         wxPD_CAN_SKIP | 
         wxPD_APP_MODAL | 
         //wxPD_AUTO_HIDE | // -- try this as well 
         wxPD_ELAPSED_TIME | 
         wxPD_ESTIMATED_TIME | 
         wxPD_REMAINING_TIME | 
         wxPD_SMOOTH // - makes indeterminate mode bar on WinXP very small 
         ); 

bool cont = true; 
for (int i = 0; i <= max; i++) 
{ 
    wxString msg; 

    // test both modes of wxProgressDialog behaviour: start in 
    // indeterminate mode but switch to the determinate one later 
    const bool determinate = i > max/2; 

    if (i == max) 
    { 
     msg = "That's all, folks!\n" 
       "\n" 
       "Nothing to see here any more."; 
    } 
    else if (!determinate) 
    { 
     msg = "Testing indeterminate mode\n" 
       "\n" 
       "This mode allows you to show to the user\n" 
       "that something is going on even if you don't know\n" 
       "when exactly will you finish."; 
    } 
    else if (determinate) 
    { 
     msg = "Now in standard determinate mode\n" 
       "\n" 
       "This is the standard usage mode in which you\n" 
       "update the dialog after performing each new step of work.\n" 
       "It requires knowing the total number of steps in advance."; 
    } 

    // will be set to true if "Skip" button was pressed 
    bool skip = false; 
    if (determinate) 
    { 
     cont = dialog.Update(i, msg, &skip); 
    } 
    else 
    { 
     cont = dialog.Pulse(msg, &skip); 
    } 

    // each skip will move progress about quarter forward 
    if (skip) 
    { 
     i += max/4; 

     if (i >= 100) 
      i = 99; 
    } 

    if (!cont) 
    { 
     if (wxMessageBox(wxT("Do you really want to cancel?"), 
          wxT("Progress dialog question"), // caption 
          wxYES_NO | wxICON_QUESTION) == wxYES) 
      break; 

     cont = true; 
     dialog.Resume(); 
    } 

    wxMilliSleep(200); 
} 

if (!cont) 
{ 
    wxLogStatus(wxT("Progress dialog aborted!")); 
} 
else 
{ 
    wxLogStatus(wxT("Countdown from %d finished"), max); 
} 

}

+0

沒有看到您的代碼,我們的魔法玻璃球不能正常工作。你在哪裏打電話Fit()?我只希望在wxProgressDialog ctor。 – Ripi2

回答

1

如果你想有一個固定的大小,你需要使用wxGenericProgressDialog ,似乎沒有任何方法可以阻止本機對話框,在支持它的系統(Vista和更高版本)下默認使用本地對話框,將其大小調整爲其內容。

相關問題