我要做个排课的进度条.
我在非模态对话框中创建一个CProgressCtrl,在主程序的一个循环中根据实际的进度,发消息给非模态对话框,让CProgressCtrl显示实际进度,
怎样发消息给非模态对话框? 怎样在非模态对话框中让CProgressCtrl显示实际进度?
不知我的方法行得通不,是否有更好的方法?

解决方案 »

  1.   

    最笨的办法,用一个全局变量,保存进度,对话框里用一个timer来检查进度
    一般不推荐但好象不要发消息这么复杂
    要得到另一个类里的私有成员,想想,该怎么做呢?
      

  2.   

    先得到Progress Bar的HWND hwndProcessbar.int iNewPos=80;
    ::SendMessage(hwndProcessbar,PBM_SETPOS,(WPARAM)iNewPos,0);
      

  3.   

    楼上的兄弟.怪小弟还是菜鸟,不知该如何得到Progress Bar的HWND hwndProcessbar. 望赐教.
      

  4.   

    还有就是非模态对话框中的CProgressCtr是否能自动接收到发出的消息呢>?
      

  5.   

    使用非模态对话框实现
    例如:
    在资源中添加一个消息:WM_TEST
    有个非模态对话框的类:CTestDlg
    在其中影射此消息的处理函数:
    CTestDlg.h中:afx_msg void ShowProgress(WPARAM wParam,LPARAM lParam);
    CTestDlg.cpp中:ON_MESSAGE(WM_TEST,ShowProgress)void ShowProgress(WPARAM wParam,LPARAM lParam)
    {
        m_prgress.SetRange(0,int(wParam));
        m_prgress.SetPos((int)lParam);
    }
    主程序CTest:
    在CTest类的头文件里:
    CTestDlg *pDlg;
    在此类的初始化文件中:
    pDlg = new CTestDlg;
    pDlg->Create(IDD_TESTDLG,this);
    在需要显示进度的地方:
    pDlg->ShowWindow(SW_SHOW);
    在进度改变的时候:
    int nTotal;
    int nProgress;
    nTotal = ;
    nProgress = ;
    pDlg->SendMessage(WPARAM(nTotal),LPARAM(nProgress));   
      

  6.   

    在非模态对话框里面加入消息处理
    LRESULT CDemoDlg::OnProgressOffset(WPARAM wParam,LPARAM lParam)
    {
    m_progress.OffsetPos(wParam);
    return NULL;
    }
    然后在主程序循环中不断发消息
       m_pDlg=new CMyDlg;
    m_pDlg->Create(IDD,this);
    m_pDlg->ShowWindow(SW_SHOW);
    m_pDlg->CenterWindow(this);
    ::SendMessage(m_pDlg->m_hWnd,WM_PROGRESS_OFFSET,1,NULL);