我的一个软件的启动很慢,约20秒,我想用一个进度条来反映程序启动过程,不至于让用户以为程序还没有启动。
敬请各位大侠赐教一例!

解决方案 »

  1.   

    请参照:
    http://expert.csdn.net/Expert/topic/2150/2150154.xml?temp=.1731989arxing(阿行)大哥的说法是可行的,你可以开一个线程来显示该对话框。
    我按照arxing(阿行)的方法解决了问题。
      

  2.   

    to ejiue(睡师)
    你的意思是dosomething在开的线程里面做吗?
      

  3.   

    那么慢的启动过程,肯定有一个Splash吧,为什么不直接在Splash上画图你,我就是这么干的:)先让Splash的CView比图形高一点,留出下面的空白做进度条,然后在CSplash类加几个变量int m_Percent = 0, 和一个方法:void SetCurState(int nPercent);设置m_Percent的值,同时让窗口重画
    void CSplashWnd::SetCurState(int nPercent, char* pTip)//pTip为需要在进度条上显示的信息,如果需要也得用全局变量CString m_strTip
    {
    m_nPercent = nPercent;
    if(pTip)
    {
    m_strTip   = CString(pTip); }
    InvalidateRect(CRect(0, m_bmHeight, m_bmWidth, m_bmHeight+ 19));
             //m_bmHeight为图象的高,m_bmWidth为图象的宽,全局变量
    UpdateWindow();
    }在OnPaint里原代码后面加入以下代码: //绘制初始化信息及进度
    CFont font;
    font.CreateFont(12, 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
    CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_DONTCARE, "宋体");

    CBrush brush1(RGB(255, 255, 255));
    CBrush brush2(RGB(65, 116, 165)); int nWidth = (int)((float)m_bmWidth / 100.0 * (float)m_nPercent); dc.FillRect(CRect(0, m_bmHeight, m_bmWidth, m_bmHeight+19), &brush1);
    dc.FillRect(CRect(0, m_bmHeight, nWidth, m_bmHeight+19), &brush2); CFont* pOldFont = dc.SelectObject(&font);
    dc.SetTextColor(COLOR_WINDOWTEXT);
    dc.TextOut(4, m_bmHeight+3, m_strTip);
    dc.SelectObject(pOldFont);
    font.DeleteObject();在主窗口的CPP里#include “Splash.h”,在需要改变进度条信息的地方加
    if(CSplashWnd::c_pSplashWnd)
    (CSplashWnd::c_pSplashWnd)->SetCurState(80, "正在初始化......");呵呵,看看怎么样,够专业吧?当然你还可以发挥的的想象,画出一个酷毙了的进度条!