马上就要找工作了,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
好了,马上开始Debug的单步调试。
1, 新建一个MFC AppWizard(exe),选择单文档应用程序,完成。
2, 直接按F10,进入单步调试程序。
(1) 第一个函数_tWinMain,#define _tWinMain WinMain,windows程序的入口点函数。
hInstance为0x00400000,进程虚拟地址空间的入口点,进程句柄。
(2) 按下F10并不能继续运行?退出,在Debug.cpp中,CDebugApp theApp;处设置断点。
现在遇到了困难,是不是思路不对?还要继续吗?有没有更好的方法?希望大家给些意见
环境:VC6 XP
(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消息更新客户区域如果更新区是空的,发送消息到应用程序队列。
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()?而且程序到此不能单步调试了,进入到了消息循环中了?
当然如果你时间多,学学也无妨
首先打好C++基础-〉然后学习Windows API开发-〉用API写一些小程序-〉然后再学习MFC,
-〉用MFC写一些小程序-〉分析这些小程序如何工作的-〉然后不断写代码-〉对MFC熟悉到一定程度,
-〉分析MFC是如何工作的-〉最后才是调试和了解MFC的本质。单步调试自己的代码,不要跳到MFC源码里面,那些你很难一下子理解。