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

マーキーを 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 に答える