主对话框有状态条m_Bar,panels为4个
static UINT BASED_CODE indicators[] =
{
    IDS_C1,
    IDS_C2,
    IDS_C3,
    IDS_C4
};
m_Bar.Create(this); 
m_Bar.SetIndicators(indicators,4);//Set the number of panes
CRect rect;
GetClientRect(&rect);
//状态条panes属性
m_Bar.SetPaneInfo(0,IDS_C1,SBPS_NORMAL,60);      
m_Bar.SetPaneInfo(1,IDS_C2,SBPS_STRETCH,180);
m_Bar.SetPaneInfo(2,IDS_C2,SBPS_NORMAL,60);
m_Bar.SetPaneInfo(3,IDS_C3,SBPS_NORMAL,40);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,IDS_C2);
在按一个菜单后弹出另外一对话框,修改数据后置state=1,马上让主对话框的第四个m_panel显示"成功"(在不关闭弹出的对话框的前提下)。也就是怎样调用主对话框的m_Bar在另外一个对话框中使用?

解决方案 »

  1.   

    得到主对话框的指针。
    p->m_Bar.........
      

  2.   

    我在另外一个对话框QDQT.h头文件件中
    class CBtoBDlg;//主对话框类
    class CQDQT;public CDialog
    {
    .....
    Public:
       CBtoBDlg* dlg;
    ...
    }
    在QDQT.cpp执行文件中这样写:
    dlg->m_Bar.SetPanInfo(3,_T("已签到"));
    编译出错!!!
      

  3.   

    你应该在你处理 修改数据后置state=1 的函数里做这个设置状态栏。所以在那个地方得到主对话框的指针。再SetPanInfo
      

  4.   

    在执行文件中包涵主对话框头文件#include "CBtoBDlg.h"
    修改数据后置state=1 的函数里:
    CBtoBDlg* Dlg;
    Dlg->m_Bar.SetPaneText(3,_T("成功签到"));
    编译通过,不过执行时出错!!!
      

  5.   

    出错:
    Debug Assertion Failed!
    program:d:\BtoB\BtoB\Debug\Btob.exe
    File:barstat.cpp
    line:416
    For in Function on how your program can cause an assertion failure,see the visual .......on assetts.
    (press Retry to debug the application)
    按了Retry后,指向
    BOOL CStatusBar::SetPaneText(int nIndex,lpCTSTR lpszNewText,BOOL bb)
    {
    ....
    ASSERT(::IsWindow(m_hwnd);//指向这里
    ....
    }
      

  6.   

    首先你需要创建一个非模拟对话框,CDialog::Create中指定父窗口为你的主对话框。
    另外从你的程序出错来看,说明你的窗口句柄无效。
    你的窗口句柄应该是主对话框的窗口句柄,获得主对话框的指针可以用
    CWnd::GetParent
      

  7.   

    模式对话框不行吗?
    在父对话框中点菜单产生的
    void CBtoBDlg:OnQdQt()
    {
       CQDQT dlg;
       dlg.DoModal();
    }
      

  8.   

    AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR)->SetPaneText(3,_T("成功签到"));
      

  9.   

    写错了,需要转换一下。
    CStatusBar * p_bar;
    p_bar = (CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
    p_bar->SetPaneText(3,_T("成功签到"));