• MFC vs. SDK程序流程


    大家都知道,windows API编程以及其消息处理,其过程都清晰可见,大体步骤如下:

    1)声明消息窗口类

    2)注册窗口类

    3)createwindows

    4)消息获得以及分派(windows procedure)。

    但是,对于MFC同样是Windows程序,其流程却显得灰暗不明。先具体分析(备录)如下:

    在MFC中有两个重要的类,CWinApp,CFrameWnd,它们两个的存在在某种意义上来说代替了WinMain 和 WinProc的存在。

    对于任何一个MFC程序,都存在一个Application Object(theApp),由于它是一个全局对象,因此是一个程序的入口点,当TheApp构造完了以后,由链接器将WinMain加入到应用程序中,它调用了AfxWinMain()函数。之后在AfxWinMain中,执行了AfxWinInit(),pApp->InitApplication(),pApp->InitInstance(), pApp->Run();AfxWinTerm();完成程序的整个过程。

    关于 InitInstance: 首先,它会new一个CFrameWnd成员,其构造函数调用了Create();create()里面调用了createEx(),CreateEx()调用了PreCreateWindows();这里面MFC默认注册了5种类型的窗口类型(Wnd,controlbar, mdiframe, FrameOrView, OleControl)。
    消息过程的流程:主要是调用AfxWndProc-〉AfxCallWndProc-> Wnd.WindowProc().这里其实是程序真正的处理过程,首先判断是否为WM_COMMAND消息;不是就按照通常的方法,进行处理(查找消息映射表,由宏建立起来的内存表),是就按照MFC规定的路线进行处理。CWnd::OnCommand()调用的是OnCmdMsg(),这里MFC规定了其消息的路线(view ,document,framewnd,winapp)。

    转自:http://blog.csdn.net/ingor/article/details/2085736

  • 相关阅读:
    20181022-JSP 开发环境搭建
    20181019-JSP 教程/简介
    20180829-Java多线程编程
    20180827(02)- Java发送邮件
    20180827-Java网络编程
    20180912-Java实例02
    docker安装redis
    springboot2集成swagger2出现guava包下的FluentIterable.append方法找不到
    Linux Centos7 网络设置UUID号的修改方法
    CentOS 7 主机名bogon解决办法
  • 原文地址:https://www.cnblogs.com/Dageking/p/4226030.html
Copyright © 2020-2023  润新知