首页
社区
课程
招聘
[旧帖] [求助]如何在MFC底层代码里打断点 0.00雪花
发表于: 2012-4-15 00:34 1483

[旧帖] [求助]如何在MFC底层代码里打断点 0.00雪花

2012-4-15 00:34
1483
本人想学习MFC框架,也参看了深入浅出MFC,按理来说应该是在InitInstance里创建个框架对象,即new CMainFrame,然后就createwindow,之后才showwindow现在用VC6随便建个单文档工程,在CTestApp::InitInstance里没有看到哪个函数开始调用创建窗口的。
在        m_pMainWnd->ShowWindow(SW_SHOW);
        m_pMainWnd->UpdateWindow();处打断点,发现在到达之前确实是会跳到创建窗口的地方,但是不知道在CTestApp::InitInstance里的哪条语句开始跳到创建窗口的。
本人就在MFC内部的什么create,createEX之类的函数开始地方打断点,以方便观察流程,但是按F5调试之后提示这些断点无效,然后函数栈观察窗里也没看到
求高手告诉我怎么调?或者在那条语句开始跳到创建框架的?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 238
活跃值: (55)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
你这也叫看了深入浅出mfc?
2012-4-15 01:09
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
3
下断创建窗口的函数, 然后看调用栈.
2012-4-15 01:13
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
就是没有看到instance函数里有创建窗口的。在Create之类的创建窗口函数地方下断点,调试的时候VC提示说无效的断点,忽略掉,然后函数栈里也看到
侯捷的深入浅出里贴出来的代码都是在instance里面new一个CMainframe类,然后就是createwindow,showwindow,updatewindow,都是在instance里面调用的。
2012-4-15 11:48
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
第一次发帖,不知道哪里冒犯了你,我是来解决疑问的,不是来跟你吵得。

这是VC6.0向导自动创建的:BOOL CTestApp::InitInstance()
{
        AfxEnableControlContainer();

        #ifdef _AFXDLL
        Enable3dControls();                        // Call this when using MFC in a shared DLL
#else
        Enable3dControlsStatic();        // Call this when linking to MFC statically
#endif
        SetRegistryKey(_T("Local AppWizard-Generated Applications"));

        LoadStdProfileSettings();  // Load standard INI file options (including MRU)
        CSingleDocTemplate* pDocTemplate;
        pDocTemplate = new CSingleDocTemplate(
                IDR_MAINFRAME,
                RUNTIME_CLASS(CTestDoc),
                RUNTIME_CLASS(CMainFrame),       // main SDI frame window
                RUNTIME_CLASS(CTestView));
        AddDocTemplate(pDocTemplate);

        // Parse command line for standard shell commands, DDE, file open
        CCommandLineInfo cmdInfo;
        ParseCommandLine(cmdInfo);

        // Dispatch commands specified on the command line
        if (!ProcessShellCommand(cmdInfo))
                return FALSE;

        // The one and only window has been initialized, so show and update it.
        m_pMainWnd->ShowWindow(SW_SHOW);
        m_pMainWnd->UpdateWindow();

        return TRUE;
}

这是侯捷深入浅出MFC里scribble例子:
BOOL CScribbleApp::InitInstance()
{
#ifdef _AFXDLL
        Enable3dControls();                     // Call this when using MFC in a shared DLL
#else
        Enable3dControlsStatic();       // Call this when linking to MFC statically
#endif

        LoadStdProfileSettings();  // Load standard INI file options (including MRU)
        CMultiDocTemplate* pDocTemplate;
        pDocTemplate = new CMultiDocTemplate(
                IDR_SCRIBBTYPE,
                RUNTIME_CLASS(CScribbleDoc),
                RUNTIME_CLASS(CChildFrame), // custom MDI child frame
                RUNTIME_CLASS(CScribbleView));

        AddDocTemplate(pDocTemplate);
        CMainFrame* pMainFrame = new CMainFrame;
        if (!pMainFrame->LoadFrame(IDR_MAINFRAME))//这里开始调用create,creatEX,precreatewindow开始创建窗口
                return FALSE;
        m_pMainWnd = pMainFrame;
        m_pMainWnd->DragAcceptFiles();
        EnableShellOpen();
        RegisterShellFileTypes(TRUE);
        CCommandLineInfo cmdInfo;
        ParseCommandLine(cmdInfo);
        if (!ProcessShellCommand(cmdInfo))
                return FALSE;
        pMainFrame->ShowWindow(m_nCmdShow);
        pMainFrame->UpdateWindow();

        return TRUE;
}
以上代码把注释去掉,写过win32程序的人应该知道流程,在MFC里,instance函数里开始各种调用跳转,完成窗口类的设计,注册,创建窗口,显示,更新窗口,然后才离开instance函数栈进入到run
2012-4-15 12:11
0
雪    币: 1596
活跃值: (25)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
6
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(//设置模板
		IDR_MAINFRAME,
		RUNTIME_CLASS(CTestappDoc),
		RUNTIME_CLASS(CMainFrame),       // 以这个类为基础,所以CreateWindow在这里面
		RUNTIME_CLASS(CTestappView));
AddDocTemplate(pDocTemplate);//应用模板

见:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
2012-4-16 11:31
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
看看看看
2012-4-16 12:47
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
明白了,忘了RUNTIME_CLASS可以动态创建,呵呵,谢谢
2012-4-16 12:47
0
游客
登录 | 注册 方可回帖
返回
//