CSplitterWnd :: GetPane 获取控件崩溃

void_main_void 2016-08-27 12:15:38


我在CMainFrame::中想获取红色方框控件指针,调用m_SplitterWnd2.GetPane(1, 0); 时崩溃了。为何?


void CMainFrame::addUDPPack(tagIPHead* ipHead, tagUDPHead* udpHead)
{
char szSource[MAX_ADDR_LEN] = { 0 };
char szDest[MAX_ADDR_LEN] = { 0 };

getIpAddress(szSource, szDest, ipHead);

//崩溃了。。。。。
CDataPackView* dataPackView = (CDataPackView*)m_SplitterWnd2.GetPane(1, 0);
if (dataPackView == nullptr)
{
return;
}
.................
}


我在CSDN查询拿控件信息也是这样的啊。。我这里就崩溃了呢???代码行连F11都进不去就崩掉了。

网上看 m_SplitterWnd2 不是public 会有问题。我设置了还是一样。

只有一个崩溃信息

---------------------------
Microsoft Visual C++ Runtime Library
---------------------------
Debug Assertion Failed!

Program: C:\windows\system32\mfc120ud.dll
File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp
Line: 972

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)

---------------------------
中止(A) 重试(R) 忽略(I)
---------------------------


下面是控件布局。


BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
initSocket();

BOOL ret = m_SplitterWnd.CreateStatic(this, 1, 2);

m_SplitterWnd.CreateView(0, 0,
RUNTIME_CLASS(CProcessTree),
CSize(200, 100), pContext);

//////////////////////////////////////////////////////////////////////////

ret = m_SplitterWnd2.CreateStatic(
&m_SplitterWnd,
3, 1,
WS_CHILD | WS_VISIBLE,
m_SplitterWnd.IdFromRowCol(0, 1));

ret = m_SplitterWnd2.CreateView(0, 0,
RUNTIME_CLASS(CHttpView),
CSize(200, 100), pContext);


ret = m_SplitterWnd2.CreateView(1, 0,
RUNTIME_CLASS(CDataPackView),
CSize(400, 300), pContext);

//////////////////////////////////////////////////////////////////////////

ret = m_SplitterWnd3.CreateStatic(
&m_SplitterWnd2,
1, 2,
WS_CHILD | WS_VISIBLE,
m_SplitterWnd2.IdFromRowCol(2, 0));

ret = m_SplitterWnd3.CreateView(0, 0,
RUNTIME_CLASS(CDataEdit),
CSize(400, 300), pContext);

ret = m_SplitterWnd3.CreateView(0, 1,
RUNTIME_CLASS(CDataEdit),
CSize(400, 300), pContext);

return ret;
}
...全文
443 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyz_cs 2017-02-11
  • 打赏
  • 举报
回复
线程要各司其职
rxguoblp 2016-08-30
  • 打赏
  • 举报
回复
引用 5 楼 void_main_void 的回复:
指针获取失败不知道是不是在线程函数的原因,我直接在Create之后,在调用GetPane获取就能获取成功。那个时候直接成员指针保持就行了。 但是在线程中获取就失败了。也没有错误信息。
你说得对,就是这个原因,分割完之后立即保存待用子窗口的指针。
赵4老师 2016-08-29
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
void_main_void 2016-08-29
  • 打赏
  • 举报
回复
指针获取失败不知道是不是在线程函数的原因,我直接在Create之后,在调用GetPane获取就能获取成功。那个时候直接成员指针保持就行了。 但是在线程中获取就失败了。也没有错误信息。
void_main_void 2016-08-29
  • 打赏
  • 举报
回复
引用 2 楼 oyljerry 的回复:
对应的指针应该获取失败了,查看一下错误信息等。
就是没有错误信息啊。才论坛提问的。不过解决了
void_main_void 2016-08-29
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
如果有错误信息我就不会论坛提问了。。。
oyljerry 2016-08-29
  • 打赏
  • 举报
回复
对应的指针应该获取失败了,查看一下错误信息等。

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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