我是想这样把一个系统的MFC类传给自己的类,用自己的类来控制系统类的显示,下面的类是状态栏上的进度条。用什么方法???
代码如下:
-----------------
系统的多文档类
class CMainFrame : public CFrameWnd
{
...
public:

         CProgressCtrl m_Progress; //这个是状态栏上的进度条类
afx_msg void OnProgress(); //这个是菜单上单了进度条演示的MSG
...
};
//我自己的类
class Step
{
public:
void Step(CProgressCtrl p);
};
void Step::Step(CProgressCtrl p)
{
p.StepIt(); //进度度+1
}
//得到消息OnProgress后
void CMainFrame::OnProgress()
{
Step s;
s.Step(&m_Progress);
//我想把多文档的这个类送到自己的类让自己的类来控制它显示
}

解决方案 »

  1.   

    你这样做不合理:你的类step生存期要长
    CProgressCtrl 是个子窗口,必须依靠其它窗口才能存在
    在状态上显示进度条,一般是把进度条做为状态栏窗体的子窗体,然后再在主程序中StepIt
      

  2.   

    比如说一个项目有20几个状态栏 我的程序是SOCKET的要收发数据,SOCKET的收发全是一样的,那我要每次全去把这样重复的代码COPY进去,太累了。
    有没有办法达到这样的笑果,我上面的代码是不能用的,编译不过,我就是想每次只要调我的自建类,把状态栏送到函数里,这样省好多的事。
    或有什么别的方法可以做出一样的笑果?
      

  3.   

    // 用引用或者指针
    class Step
    {
    public:
    void Step(CProgressCtrl &p);
    或者
    void Step(CProgressCtrl *p);};// 编一基类
      

  4.   

    你的类中头文件可以这样写
    CProgressCtrl& GetProgressCtrl() {
    return m_wndProgBar;
    }
    void OnProgress(UINT pct);protected:
    CProgressCtrl m_wndProgBar; 然后在你的STEP

    CProgressCtrl& pc = m_wndProgBar;
    DWORD dwOldStyle = pc.GetStyle();
    DWORD dwNewStyle = dwOldStyle;
    if (pct>0)
    // positive progress: show prog bar
    dwNewStyle |= WS_VISIBLE;
    else
    // prog <= 0: hide prog bar
    dwNewStyle &= ~WS_VISIBLE; if (dwNewStyle != dwOldStyle) {
    // change state of hide/show
    SetWindowText(NULL); // clear old text
    SetWindowLong(pc.m_hWnd, GWL_STYLE, dwNewStyle); // change style
    } // set progress bar position
    pc.SetPos(pct);
    if (pct==0)
    // display MFC idle (ready) message.
    GetParent()->PostMessage(WM_SETMESSAGESTRING, AFX_IDS_IDLEMESSAGE);
    }
    试试
      

  5.   

    谢谢你 lovenoend(有容乃大) 用你的方法就对了,真的很感谢你:~~~~~~)
    也谢谢zjg751206(play程序) 你的方法我也会试的.