主对话框有状态条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在另外一个对话框中使用?
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在另外一个对话框中使用?
p->m_Bar.........
class CBtoBDlg;//主对话框类
class CQDQT;public CDialog
{
.....
Public:
CBtoBDlg* dlg;
...
}
在QDQT.cpp执行文件中这样写:
dlg->m_Bar.SetPanInfo(3,_T("已签到"));
编译出错!!!
修改数据后置state=1 的函数里:
CBtoBDlg* Dlg;
Dlg->m_Bar.SetPaneText(3,_T("成功签到"));
编译通过,不过执行时出错!!!
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);//指向这里
....
}
另外从你的程序出错来看,说明你的窗口句柄无效。
你的窗口句柄应该是主对话框的窗口句柄,获得主对话框的指针可以用
CWnd::GetParent
在父对话框中点菜单产生的
void CBtoBDlg:OnQdQt()
{
CQDQT dlg;
dlg.DoModal();
}
CStatusBar * p_bar;
p_bar = (CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
p_bar->SetPaneText(3,_T("成功签到"));