递进分析--MFC的本质

在微软设计MFC是为了使编程人员在实际开发过程中更方便快捷而设计的基础类库。
MFC程序要遵循的一个过程是:进入WinMain函数,设计窗口类,创建窗口,显示窗口,更新窗口,然后进入消息循环;MFC本来就是基于消息循环创建的,如果没有消息循环,窗口会一闪而过;看代码:

 //消息循环
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);//接收消息
        DispatchMessage(&msg);//分配消息
        if (msg.message == WM_KEYDOWN)
        {
           
            break;
        }
    }

但是这些窗口的创建过程函数并没有定义和声明,那源码在哪呢,实际上,在安装Visual studio时,就已经安装了MFC代码,路径是…\VC\atlmfc\src\mfc,
接下来就是窗口过程函数,关键代码:

	wndcls.lpfnWndProc = DefWindowProc;
    wndcls.hInstance = AfxGetInstanceHandle();
    wndcls.hCursor = afxData.hcurArrow;

AfxGetInstanceHandle这个函数的定义是这样的

_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()
	{ ASSERT(afxCurrentInstanceHandle != NULL);
		return afxCurrentInstanceHandle; }

在往下看afxCurrentInstanceHandle这个函数做了什么就是这样的:

#define afxCurrentInstanceHandle    AfxGetModuleState()->m_hCurrentInstanceHandle

将窗口的状态指向了当前实例的句柄,其实已经可以猜到,MFC中的消息并没有全部交给DefWindowProc,而是采用消息映射处理消息;
这些东西都不需要自己去写,MFC已经帮我们实现了这些东西。
从本质上看,微软做MFC函数同样遵循了Win32 SDK程序的23种设计模式 ;

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aaronpack

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值