显示child Dialog 时InsertItem 函数奔溃

daiyoting 2018-08-14 04:39:05


编译成功,但是运行到 InsertItem 这里就奔溃。这一段代码也是参考已有程序。初学MFC,基础薄弱,始终不知道哪里有问题。


BOOL CDlgBaseInfoManage::OnInitDialog()
{
CDialogEx::OnInitDialog();

// TODO: 在此添加额外的初始化
//设置标签控件标题及对应显示的对话框
m_tab.AddPage(L"用户信息",&m_dlg_baseinfomanage_operator,IDD_BASEINFOMANAGE_OPERATOR);
if (nSelect >= 0)
{
m_tab.Show(nSelect);
}
else
{
m_tab.Show();
}
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}


BOOL CTabSheet::AddPage(LPCTSTR title, CDialog *pDialog,UINT ID)
{
if( MAXPAGE == m_nNumOfPages )
return FALSE;

m_nNumOfPages++;

m_pPages[m_nNumOfPages-1] = pDialog;
m_IDD[m_nNumOfPages-1] = ID;
m_Title[m_nNumOfPages-1] = title;

return TRUE;
}



void CTabSheet::Show(int n)
{
for( int i=0; i < m_nNumOfPages; i++ )
{
m_pPages[i]->Create( m_IDD[i], this );
InsertItem( i, m_Title[i] );
}

for(int i=0; i < m_nNumOfPages; i++)
m_pPages[i]->ShowWindow(SW_HIDE);
m_pPages[n]->ShowWindow(SW_SHOW);

SetRect(n);
SetCurSel(n);

}
...全文
165 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
daiyoting 2018-08-15
  • 打赏
  • 举报
回复
查阅了别的资料,在堆栈里找到了问题所在。忙倒半夜,终于解决了。

感谢您的回答,一开始确实为m_tab 错误所致,后面更改m_tab后,依然错误的原因,
实则是后面程序有bug所致!
schlafenhamster 2018-08-14
  • 打赏
  • 举报
回复
m_pPages[i] 应该保存 Create( m_IDD[i], this ); 的 结果
m_pPages[i] =0 ; ??
afxDump << m_pPages[i] << "\n";
daiyoting 2018-08-14
  • 打赏
  • 举报
回复
这个问题突然间解决了,在经过多次编译后,下面的奔溃没了!


还请问一下是什么原因? 奔溃时有时无
daiyoting 2018-08-14
  • 打赏
  • 举报
回复



m_pPages[i]->Create( m_IDD[i], this );
这一句就奔溃了。 TabSheet类是参考别人的程序,其源程序经过检验。
现在我遇到的问题没有头绪,不知道从哪下手解决问题。
daiyoting 2018-08-14
  • 打赏
  • 举报
回复


原本的m_tab确实有一点问题,并没有在dodataExchange添加 DDX_Control(pDX, IDC_TAB, m_tab)
那现在我把m_tab 改为这样:


public:
CTabSheet m_tab;


void CDlgBaseInfoManage::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TAB, m_tab);
}


还是奔溃
schlafenhamster 2018-08-14
  • 打赏
  • 举报
回复
m_tab 问题 !

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧