MFC 学习笔记

MFC 学习笔记一.MFC编程基础:概述:

MFC 学习笔记

文章插图
常用头文件:
MFC 学习笔记

文章插图
MFC控制台程序:
MFC 学习笔记

文章插图
MFC库程序:
MFC 学习笔记

文章插图
规则库可以被各种程序所调用,扩展库只能被MFC程序调用 。
MFC窗口程序:
MFC 学习笔记

文章插图
示例:
MFC 学习笔记

文章插图
MFC库中类的简介:
MFC 学习笔记

文章插图

MFC 学习笔记

文章插图
具体详细细节可以参考离线文档
第一个MFC程序:1.创建一个win32程序
2.设置使用MFC
3.添加类
#include <afxwin.h>class CMyFrameWnd : public CFrameWnd{};class CMyWinApp : public CWinApp{public: CMyWinApp() { } virtual BOOL InitInstance(){//此函数内部的this为&theAppCMyFrameWnd* pFrame = new CMyFrameWnd;pFrame->Create(NULL, "MFCBase");this->m_pMainWnd = pFrame;pFrame->ShowWindow(SW_SHOW);pFrame->UpdateWindow();return TRUE; }};CMyWinApp theApp;//爆破点4.效果:
MFC 学习笔记

文章插图
MFC程序启动:
MFC 学习笔记

文章插图

MFC 学习笔记

文章插图
AFX_MODULE_STATE aaa;//当前程序模块状态信息AFX_MODULE_THREAD_STATE bbb; //当前程序线程状态信息CWinApp::CWinApp()//构造全局对象CMyWinApp theApp{AFX_MODULE_STATE* pModuleState = AfxGetModuleState();//获取全局变量&aaaAFX_MODULE_THREAD_STATE* pThreadState = pModuleState->m_thread;//获取全局变量&bbbpThreadState->m_pCurrentWinThread = this;//将&theApp保存到bbb的一个成员中AfxGetThread(){AFX_MODULE_THREAD_STATE* pState = AfxGetModuleThreadState();//获取&bbbCWinThread* pThread = pState->m_pCurrentWinThread;return pThread;//返回的为&theApp}pModuleState->m_pCurrentWinApp = this;//将&theApp保存到aaa的一个成员中AfxGetApp(){return AfxGetModuleState()->m_pCurrentWinApp;//返回&theApp}}【MFC 学习笔记】通过将断点打在InitInstance()这个方法,在调用堆栈里可以看到MFC里封装的WinMain方法 。
MFC 学习笔记

文章插图
WinMain(...)//程序流程是不是theApp对象指导向哪走{AfxWinMain(...){CWinThread* pThread = AfxGetThread();CWinApp* pApp = AfxGetApp();//这两代码都是获取&theApppApp->InitApplication();//利用theApp对象调用应用程序类成员虚函数 初始化pThread->InitInstance();//利用theApp对象调用应用程序类成员虚函数 创建并显示窗口pThread->Run()//利用theApp对象调用应用程序类成员虚函数 消息循环{for (;;) {while(没有消息时)OnIdle(..);//利用theApp对象调用应用程序类成员虚函数 空闲处理do{if(GetMessage抓到WM_QUIT)return ExitInstance();//程序结束前,利用theApp对象调用应用程序类成员虚函数 善后处理 。}while(...)}}}}二.MFC窗口和消息:钩子简介:
MFC 学习笔记

文章插图

MFC 学习笔记

文章插图
#include <afxwin.h>class CMyFrameWnd : public CFrameWnd{public: virtual LRESULT WindowProc( UINT msgID, WPARAM wParam, LPARAM );};LRESULT CMyFrameWnd::WindowProc( UINT msgID, WPARAM wParam, LPARAM lParam ){ //此函数内部的this为pFrame switch( msgID ){ case WM_CREATE:AfxMessageBox( "WM_CREATE消息被处理" );break; case WM_PAINT:{PAINTSTRUCT ps = { 0 };HDC hdc = ::BeginPaint( this->m_hWnd, &ps );::TextOut( hdc, 100, 100, "hello", 5 );::EndPaint( m_hWnd, &ps );}break; } return CFrameWnd::WindowProc(msgID, wParam, lParam);}class CMyWinApp : public CWinApp{public: virtual BOOL InitInstance( );};CMyWinApp theApp;//爆破点BOOL CMyWinApp::InitInstance( ){CMyFrameWnd* pFrame = new CMyFrameWnd;pFrame->Create(NULL, "MFCCreate");m_pMainWnd = pFrame;pFrame->ShowWindow( SW_SHOW );pFrame->UpdateWindow( );return TRUE;}

经验总结扩展阅读