3

如何在 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 上创建不确定进度条的内容,如下所示: 进度条

4

1 回答 1

2

为了创建一个不确定的进度条(称为选取框),您需要在对话框编辑器Marquee中将进度条的属性设置为。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
}

结果如下:

选取框结果

于 2013-10-05T08:28:47.653 回答