mfc 窗口注册问题(急)

//创建主MDI框架窗口CMainFrame*pMainFrame=newCMainFrame;if(!pMainFrame||!pMainFrame->LoadFram... // 创建主 MDI 框架窗口
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME))
{
delete pMainFrame;
return FALSE;
}

调试的时候出错,提示信息:xxx.exe中的0x00413156处未处理的异常:0xC0000005:读取位置0xfeeefef2时发生访问冲突!

请问如果处理
我是自己定义窗口类型,然后注册的时候,调试产生错误的(在MainFrame类中)
if( !CMDIFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式

WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;

wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL, IDC_HELP);
wndcls.hIcon=LoadIcon(NULL, IDI_ERROR);
wndcls.hInstance=AfxGetInstanceHandle();

wndcls.lpfnWndProc=::DefWindowProc;
wndcls.lpszClassName=_T("test");
wndcls.lpszMenuName=NULL;

wndcls.style = CS_HREDRAW|CS_VREDRAW;

RegisterClass(&wndcls);
cs.lpszClass=_T("regist");

return TRUE;
如果 我自己定义窗口格式,那MAINFRAME传进的cs还有用吗?
展开
 我来答
silvergingko
2009-09-17 · TA获得超过5945个赞
知道小有建树答主
回答量:688
采纳率:0%
帮助的人:848万
展开全部
delete一个NULL指针不会、不属于错误。 楼主一开始代码的逻辑完全正确。

错在后面贴出来的代码。MFC有一条自己行走的路线,在他的每条路线上都有很多个闸,这些闸是留给我们使用,以便使我们的火车通过切换不同的闸,行走在不同的前进方向上。
MFC我们是不能自己乱改的,楼主后面贴出的代码没有按规矩办事,MFC不是想怎么写就怎么写的。
CMDIFrameWnd::PreCreateWindow(cs)这个函数楼主知道干吗用的?这个函数里面都做了些什么?我肯定楼主不知道。这个函数里面就是注册窗口用的。因此,楼主应该先填写cs的数据成员,填完了,“交表”给PreCreateWindow,让CMDIFrameWnd帮我们完成窗口注册。
楼主先调用了PreCreateWindow,就意味着cs相关的窗口类已经注册完成。
后面楼主又自己使用了完全孤立的WIN32的代码,这些代码MFC根本没机会使用的。
最糟的是最后一行“cs.lpszClass=_T("regist");”
这句是败笔,cs都已经注册完成了,可是MFC后面还要继续使用这个cs的,楼主改了其他的成员可能还不至于出现较大问题。lpszClass代表的是CFrameWnd这个窗口类,这个类名被强行改成了regist,这个类名根本没注册过,操作系统根本不认识的。而后面的MFC代码又会去继续使用这个cs,MFC后面的代码根本不知道cs被注册后,被改变了,导致后面所有的内容完全出错。
有点楼主记住,改cs,一定要在CMDIFrameWnd::PreCreateWindow(cs)之前改,改完了后就绝对不能再改!
stone_dongdong
2009-09-17 · TA获得超过2853个赞
知道大有可为答主
回答量:1636
采纳率:0%
帮助的人:981万
展开全部
那就是窗口没有注册成功。
你照 MFC的代码里面拷贝一份出来,只修改一下类名称。在注册。调试跟踪进去,看行不行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lyj19871108
2009-09-17 · TA获得超过173个赞
知道小有建树答主
回答量:211
采纳率:0%
帮助的人:134万
展开全部
问题应该出现在窗口类的构造函数里面,可能调用了一些不可以在构造函数里调用的东西。试着先mark掉一些内容,或者把这些内容放在initial里。试试看。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
何处淬吴钩
2009-09-17 · TA获得超过5043个赞
知道大有可为答主
回答量:2947
采纳率:50%
帮助的人:2338万
展开全部
其他的不想看,但一开始逻辑上就有问题。
if (!pMainFrame
这时pMainFrame == NULL,
你delete,自然会出错。
即使程序运行中侥幸没问题,也不应该这样写。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式