不确定的进度条?

时间:2013-10-04 23:57:09

标签: c++ mfc progress-bar

如何在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

1 个答案:

答案 0 :(得分: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