2016-12-06 9 views
1

Я использую wxProgressDialog для Windows. Всякий раз, когда я изменяю текст в диалоговом окне, диалоговое окно изменяет размеры, чтобы лучше всего разместить текст, это приводит к частому изменению размера диалога, который выглядит ужасно.Как я могу остановить повторный размер 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 и более поздние версии), адаптирует его размер к его содержимому.

 Смежные вопросы

  • Нет связанных вопросов^_^