int i=0;
while(n<100000)
{
    i++;
}
用进度条实时显示循环进行的长度,求大神指教!进度条ProgressBar

解决方案 »

  1.   

    int nMin;
    int nMax;
    CProgressCtrl::GetRange(nMin,nMax);
    for(int i=nMin;i<nMax;i++)
    {
        CProgressCtrl::SetPos(i);
        DoEvents();
        Sleep(50);
    }
    //DoEvents 会将控制权传给操作系统。
    //可以让程序在执行操作的同时仍可以处理其他事件,用这个方法可以有效地解决画面无法刷新的问题。
    void DoEvents()
    {
    MSG msg;
    while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
    {
    DispatchMessage(&msg);
    TranslateMessage(&msg);

    }
      

  2.   

    CProgressCtrl::SetPos(i * 100 / nMax);
      

  3.   

    int nRange=g_fileLength/20-5;    //nRange非常大例如:2200050,只会更大,求得是条数
    int nPostion=g_intmap/nRange*100;
    m_ctrlProgress.SetRange(0,100);
    while (fp.ReadString(nstrData))
    {
    if (nstrData.GetLength()>20)
    {
    g_delete=nstrData.GetLength();
    continue;
    } if(!g_mapCatch.insert(nstrData).second)
    {
    m_ctrlList.AddString(nstrData);
    WriteTxt(nstrData);
    }
    g_intmap++;
    m_ctrlProgress.SetPos(nPostion);
    DoEvent();
    }
    每条读出来以后,进度条相映应该怎样的变化?
      

  4.   

    //文件名:MyStatusBar.cpp CMyStatusBar类的实现文件//文件名:MyStatusBar.h CMyStatusBar类的头文件
    #pragma once
    class CMyStatusBar : public CStatusBar
    {
    DECLARE_DYNAMIC(CMyStatusBar)
    CProgressCtrl m_MyProgressCtrl;
    public:
    CMyStatusBar();
    virtual ~CMyStatusBar();
    CProgressCtrl &GetProgressCtrl(){return m_MyProgressCtrl;};
    protected:
    DECLARE_MESSAGE_MAP()
    public:
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    afx_msg void OnSize(UINT nType, int cx, int cy);
    };//cpp文件
    #include "stdafx.h"
    #include "Test.h"
    #include "MyStatusBar.h"
    IMPLEMENT_DYNAMIC(CMyStatusBar, CStatusBar)
    CMyStatusBar::CMyStatusBar()
    {
    }
    CMyStatusBar::~CMyStatusBar()
    {
    }
    BEGIN_MESSAGE_MAP(CMyStatusBar, CStatusBar)
    ON_WM_CREATE()
    ON_WM_SIZE()
    END_MESSAGE_MAP()
    int CMyStatusBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CStatusBar::OnCreate(lpCreateStruct) == -1)
    return -1;
    CRect rect(0,0,0,0);
    m_MyProgressCtrl.Create(WS_CHILD|WS_VISIBLE,rect,this,IDC_MYPROGRESS);
    return 0;
    }void CMyStatusBar::OnSize(UINT nType, int cx, int cy)
    {
    CStatusBar::OnSize(nType, cx, cy);
    UINT inx;
    CRect rect;
    inx=CommandToIndex(ID_INDICATOR_MYPROGRESS);
    GetItemRect(inx,&rect);
    m_MyProgressCtrl.MoveWindow(rect);
    }使用void CMainFrame::OnTimer(UINT nIDEvent)
    {
    int nLower,nUpper;
    m_wndStatusBar.m_MyProgressCtrl.GetRange(nLower,nUpper);
    if(m_Pos>=nUpper)
    m_Pos=0;
    m_wndStatusBar.m_MyProgressCtrl.SetPos(m_Pos);
    m_Pos+=2;
    CFrameWnd::OnTimer(nIDEvent);
    }