添加进度条对话框

    技术2022-05-19  27

    1、新建一个对话框,ID为:IDD_progressDialog,并在此对话框中添加进度条控件,ID为:IDC_PROGRESS1。通过向导为进度条关联一个控制变量:m_loadProgress

    2、双击此对话框,添加CProgressContrDlg类,在CProgressContrDlg.cpp中BEGIN_MESSAGE_MAP与END_MESSAGE_MAP()之间添加ON_MESSAGE(WM_UPDATEPOS,OnMyMessage),并在StdAfx.h头文件中添加:#define WM_UPDATEPOS WM_USER + 1000

    然后添加OnMyMessage实现函数(同时在此类的头文件中添加保护成员:afx_msg void OnMyMessage(WPARAM wParam,LPARAM lprama);):

    void  CProgressContrDlg::OnMyMessage(WPARAM wParam,LPARAM lprama)

    {   

    int pos=(int)lprama;

    m_loadProgress.SetPos(pos);

    }

    3、在需要打开此对话框的CXXApp类中包含#include "ProgressContrDlg.h",并定义公有成员:CProgressContrDlg *progressDlg;

    在需要打开此对话框的CXXApp中添加全局的线程函数的调用语句:

    progressDlg->ShowWindow(TRUE);

    AfxBeginThread(ThreadFunOne,progressDlg);

            progressDlg->m_loadProgress.SetRange(0,200);

    在需要关闭此对话框的文件中添加:

    CWnd* pRgressDlg=FindWindow(NULL,"加载进度条");

    CProgressContrDlg*progress=(CProgressContrDlg*)pRgressDlg;

    progress->m_loadProgress.SetPos(1000);

    Sleep(1000);

        ::SendMessage(pRgressDlg->m_hWnd,WM_CLOSE,0,0);

    线程实现函数为(同时在CXX.h头文件中添加全局线程函数的声明:UINT ThreadFunOne(LPVOID pParam);):

    UINT ThreadFunOne(LPVOID pParam)

    {  

        CProgressContrDlg *pRgressDlg=(CProgressContrDlg*)pParam;

        for (int setPos=10;setPos<=1000;setPos+=10)

        {

    Sleep(1000);

    ::SendMessage(pRgressDlg->m_hWnd,WM_UPDATEPOS,0,setPos);

        }

     

    return 0;

    }


    最新回复(0)