马上就要找工作了,MFC还是没有将底层的原理搞清楚,看过MFC深入浅出但是没有上机调试。经过这段时间的学习,对MFC产生了很大的兴趣,希望能通过本次的单步调试深入了解MFC底层框架,还有对每个调用的API查看MSDN,更好的学习英语——嘿嘿,第一次报考四级。
好了,马上开始Debug的单步调试。
1, 新建一个MFC AppWizard(exe),选择单文档应用程序,完成。
2, 直接按F10,进入单步调试程序。
(1) 第一个函数_tWinMain,#define _tWinMain   WinMain,windows程序的入口点函数。
hInstance为0x00400000,进程虚拟地址空间的入口点,进程句柄。
(2) 按下F10并不能继续运行?退出,在Debug.cpp中,CDebugApp theApp;处设置断点。
现在遇到了困难,是不是思路不对?还要继续吗?有没有更好的方法?希望大家给些意见
  环境:VC6 XP

解决方案 »

  1.   

    (3)在CWinApp _afxOleWinApp; ——CWinApp::CWinApp ——AfxWinInit ——CDebugApp theApp;——CDebugApp::CDebugApp()——CWinApp::CWinApp——_tWinMain——AfxWinMain——InitApplication——BOOL CDebugApp::InitInstance()【CWinThread::CWinThread(没有执行)】处设置断点F9,并且按照这个顺序执行。
    (4)InitInstance()函数单步执行
    A: AfxEnableControlContainer()支持OLE控件;
    B: Enable3dControls()加载CTL3D32.DLL,支持三维窗口
    C: SetRegistryKey(_T("Local AppWizard-Generated Applications"));加载字符串项到注册表。
    D: LoadStdProfileSettings();加载MRU链表文件
    E: pDocTemplate = new CSingleDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CDebugDoc),
    RUNTIME_CLASS(CMainFrame),       // main SDI frame window
    RUNTIME_CLASS(CDebugView));
    动态分配一个CSingleDocTemplate类,并且传给CWinApp::AddDocTemplate。RUNTIME_CLASS()宏获取运行时类型信息(文档,框架,视类)
    F: AddDocTemplate(pDocTemplate):增加一个文档类到应用程序维护的可利用文档类模板。
    G: ParseCommandLine(cmdInfo):大概是:从标准的外壳命令中分割命令行。
    H: ProcessShellCommand(cmdInfo)大概:发送命令行从标准命令行中。
    I: m_pMainWnd->ShowWindow(SW_SHOW);设置程序的可视化程度
    J: m_pMainWnd->UpdateWindow();通过发送WM_PAINT消息更新客户区域如果更新区是空的,发送消息到应用程序队列。
      

  2.   

        孙鑫的视频之前已经看过了,不过想自己动手学习一下,把过程贴出来,有错误,不专业,遗漏的地方大家指出来向大家学习。    (5)AfxWinMain()函数跟踪:
    A:ASSERT(hPrevInstance == NULL);测试表达式的值,如果hPrevInstance的值不是NULL,则进入内核调试器。
    B: AfxGetThread():获取当前运行线程的CWinThread对象的指针,赋给pThread。
    C: AfxGetApp():这个程序返回的CWinApp的对象指针,可以访问应用程序的信息。
    D: AfxWinInit():初始化MFC
    E: InitApplication():MFC中已经抛弃,初始化应该放到InitInstance中。
    F: InitInstance():程序必须在每一个新创建的用户界面线程重载,完成初始一个实例。程序进入到BOOL CDebugApp::InitInstance()?而且程序到此不能单步调试了,进入到了消息循环中了?   
      

  3.   

    去工作不用搞懂内部实现,只要能用就行了,再说了,公司也不一定就用MFC.
    当然如果你时间多,学学也无妨
      

  4.   

    楼主目标定的太大了,基本是没学活走路就向跑,正确的是:
    首先打好C++基础-〉然后学习Windows API开发-〉用API写一些小程序-〉然后再学习MFC,
    -〉用MFC写一些小程序-〉分析这些小程序如何工作的-〉然后不断写代码-〉对MFC熟悉到一定程度,
    -〉分析MFC是如何工作的-〉最后才是调试和了解MFC的本质。单步调试自己的代码,不要跳到MFC源码里面,那些你很难一下子理解。