2013-10-04 3 views
2

Как сделать бесконечный неопределенный индикатор прогресса в приложении MFC?неопределенный индикатор выполнения?

Есть мой источник, но его не бесконечно, как я хочу.

WaitProcessDlg::WaitProcessDlg(CWnd* pParent /*=NULL*/) 
    : CDialogEx(WaitProcessDlg::IDD, pParent) 
{ 

} 

void WaitProcessDlg::DoDataExchange(CDataExchange* pDX) 
{ 
    CDialogEx::DoDataExchange(pDX); 
    DDX_Control(pDX, IDC_PROGRESS1, m_Progress); 
} 


BEGIN_MESSAGE_MAP(WaitProcessDlg, CDialogEx) 
    ON_WM_TIMER() 
END_MESSAGE_MAP() 

BOOL WaitProcessDlg::OnInitDialog() 
{ 
    CDialogEx::OnInitDialog(); 

    str = pApp->GetProfileString(_T("Process"), _T("Process")); 
    if(tempHWND = ::FindWindow(NULL, str)){ 
     EndDialog(0); 
    }else{ 
     CMFCRibbonProgressBar* pProgressBar = new CMFCRibbonProgressBar(IDC_PROGRESS1, pProgressBar); 

     pProgressBar->SetInfiniteMode(m_bInfiniteProgressMode); 
     pProgressBar->SetRange(0, 200); 
     pProgressBar->SetPos(200, true); 

     m_Progress.SetInfiniteMode(m_bInfiniteProgressMode); 
     m_Progress.SetRange(0, 100); 
     SetTimer(IDC_PROGRESS1, 0, NULL); 
    } 

    return TRUE; 

} 
void WaitProcessDlg::OnTimer(UINT nIDEvent) 
{ 

    while (m_Progress.GetPos() != 100){ 
     if (tempHWND = ::FindWindow(NULL, str)){ 
      EndDialog(0); 
      KillTimer(IDC_PROGRESS1); 
     } 
      m_Progress.OffsetPos(1); 
    } 
    while (m_Progress.GetPos() != 0){ 
     if (tempHWND = ::FindWindow(NULL, str)){ 
      EndDialog(0); 
      KillTimer(IDC_PROGRESS1); 
     } 
      m_Progress.OffsetPos(-1); 
    } 
    CDialog::OnTimer(nIDEvent); 
} 

Мне нужен пример или что о том, как создать неопределенные индикаторы прогресса на MFC так: Progress bar

+0

Хм. . «Но это не бесконечно, как я хочу»? Так что же это вместо этого? .. Быстрый поиск в Google предполагает, что вам может понадобиться SetPos для «0», кстати. – usr2564301

+0

нет. для этого нет никаких условий. Потому что мой индикатор выполнения теперь увеличивается, пока не увеличивается до 200, а затем уменьшается до 0 – Klasik

ответ

2

Для того, чтобы создать неопределенный прогресс бар (называемый Marquee), вам необходимо установить свойство Marquee свойства индикатора выполнения до True в редакторе диалоговых окон.

Set Marquee to True

Затем в методе InitDialog, вам нужно вызвать метод SetMarquee в строке состояния:

BOOL CMFCApplication1Dlg::OnInitDialog() 
{ 
    CDialogEx::OnInitDialog(); 

    // Set the icon for this dialog. The framework does this automatically 
    // when the application's main window is not a dialog 
    SetIcon(m_hIcon, TRUE);   // Set big icon 
    SetIcon(m_hIcon, FALSE);  // Set small icon 

    m_Progress.SetMarquee(TRUE, 1); // Start the marquee 

    return TRUE; // return TRUE unless you set the focus to a control 
} 

Вот результат:

Marquee result

+0

Большое вам спасибо! Ove – Klasik

+0

Это не работает для меня. Любой совет? – slashp

+0

@slashp Где вы застряли? Что вы пробовали? Это поможет, если вы разместите какой-либо код или сообщите нам некоторые подробности. – Ove

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