一、SDK应用程序与MFC应用程序运行过程对比

程序运行都要有入口函数,在C/C++程序中都是main函数,而windows应用程序的入口函数是WinMain或wWinMain。MFC程序也是从这个入口开始的。Windows SDK开发程序就是不使用MFC类库,直接用Windows API函数进行开发。

下面就是SDK应用程序示例

#ifndef UNICODE
#define UNICODE
#endif #include <windows.h>LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
{// Register the window class.const wchar_t CLASS_NAME[]  = L"Sample Window Class";WNDCLASS wc = { };wc.lpfnWndProc   = WindowProc;wc.hInstance     = hInstance;wc.lpszClassName = CLASS_NAME;RegisterClass(&wc);// Create the window.HWND hwnd = CreateWindowEx(0,                              // Optional window styles.CLASS_NAME,                     // Window classL"Learn to Program Windows",    // Window textWS_OVERLAPPEDWINDOW,            // Window style// Size and positionCW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,NULL,       // Parent window    NULL,       // MenuhInstance,  // Instance handleNULL        // Additional application data);if (hwnd == NULL){return 0;}ShowWindow(hwnd, nCmdShow);// Run the message loop.MSG msg = { };while (GetMessage(&msg, NULL, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{switch (uMsg){case WM_DESTROY:PostQuitMessage(0);return 0;case WM_PAINT:{PAINTSTRUCT ps;HDC hdc = BeginPaint(hwnd, &ps);FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1));EndPaint(hwnd, &ps);}return 0;}return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

上面的程序运行的流程是:进入WinMain函数->初始化WNDCLASS,调用RegisterClass函数注册窗口类->调用CreateWindowEx函数->调用ShowWindow显示窗口->进入消息循环。关于消息循环再简单说下,Windows应用程序是消息驱动的,系统或用户让应用程序进行某项操作或完成某个任务时会发送消息,进入程序的消息队列,然后消息循环会将消息队列中的消息取出,交予相应的窗口过程处理,此程序的窗口过程函数就是myWndProc函数,窗口过程函数处理完消息就完成了某项操作或任务。

  1. 设计窗口
  2. 注册窗口
  3. 创建窗口
  4. 显示和更新
  5. 通过循环取消息
  6. 处理消息(窗口过程)

WINAPI在我环境下被定义为__stdcall  ,即参数的传递顺序:参数列表从右到左依次入栈,并在函数返回前清空堆栈

MFC应用程序:编写MFC程序需要包含#include<afxwin.h>头文件

自己创建MFC应用程序框架:自定义类继承自CWinApp应用程序类,创建MyApp app应用程序对象(有且只有一个)。程序入口为InitInstance()函数。在程序入口函数中创建自定义框架类(MyFrame继承自CFrameWnd)。在MyFrame类构造函数中创建窗口Create。显示更新窗口并保存框架类对象指针。

使用应用程序向导生成单文档应用程序框架:

消息映射是一个将消息和成员函数相互关联的表。比如,框架窗口接收到一个鼠标左击消息,MFC将搜索该窗口的消息映射,如果存在一个处理WM_LBUTTONDOWN消息的处理程序,然后就调用OnLButtonDown。

将消息映射添加到一个类中所做的全部工作:

1)在所操作类中,声明消息映射宏

2)通过放置标识消息的宏来执行消息映射,相应的类将在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP的调用之间处理消息。

3)对应消息处理函数分别在类中声明,类外定义

Windows MFC编程入门——应用程序框架相关推荐

  1. VS2010/MFC编程入门之四(MFC应用程序框架分析)

    上一讲鸡啄米讲的是VS2010应用程序工程中文件的组成结构,可能大家对工程的运行原理还是很模糊,理不出头绪,毕竟跟C++编程入门系列中的例程差别太大.这一节鸡啄米就为大家分析下MFC应用程序框架的运行 ...

  2. (转载)VS2010/MFC编程入门之四(MFC应用程序框架分析)

    上一讲鸡啄米讲的是VS2010应用程序工程中文件的组成结构,可能大家对工程的运行原理还是很模糊,理不出头绪,毕竟跟C++编程入门系列中的例程差别太大.这一节鸡啄米就为大家分析下MFC应用程序框架的运行 ...

  3. (转载)VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)...

    上一节中鸡啄米讲了GDI对象之画刷CBrush,至此图形图像的入门知识就讲完了.从本节开始鸡啄米将为大家带来Ribbon界面开发的有关内容.本文先来说说如何创建Ribbon样式的应用程序框架. Rib ...

  4. VS2010/MFC编程入门之一(Ribbon界面开发:创建Ribbon样式的应用程序框架)

    Ribbon界面就是微软从Office2007开始引入的一种为了使应用程序的功能更加易于发现和使用.减少了点击鼠标的次数的新型界面,从实际效果来看,不仅外观漂亮,而且功能直观,用户操作简洁方便. 鸡啄 ...

  5. vs2010c语言窗口程序,VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)...

    上一节中鸡啄米讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口. 分割窗口概述 分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中都包含有视图,或者是同一类型 ...

  6. VS2019/MFC编程入门——文档、视图和框架:分割窗口

    上一节中讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口.在内容开始前为大家介绍一款MFC界面开发控件: Xtreme Toolkit Pro | 免费下载:是屡获殊荣的 ...

  7. VS2010/MFC编程入门

    近来鼓捣2D小游戏的过程中发现鸡啄米大神很好的MFC系列资料,在此汗颜将地址扒拉了过来,留待以后慢慢学习. VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解) (http://ww ...

  8. VS2019/MFC编程入门之对话框:向导对话框的创建及显示

    上一讲讲了属性页对话框和相关的两个类CPropertyPage类和CPropertySheet类,对使用属性页对话框做准备.本节将为大家演示如何创建向导对话框. 仍然以前面的"加法计算器&q ...

  9. (转载)VS2010/MFC编程入门之三十六(工具栏:工具栏资源及CToolBar类)

    上一节中鸡啄米讲了菜单及CMenu类的使用,这一节讲与菜单有密切联系的工具栏. 工具栏简介 工具栏一般位于主框架窗口的上部,菜单栏的下方,由一些带图片的按钮组成.当用户用鼠标单击工具栏上某个按钮时,程 ...

最新文章

  1. python多版本共存使用pip
  2. Windows全能终端神器MobaXterm
  3. 玻璃质感_他的玻璃质感让人佩服的五体投地
  4. SAP 与 JSON 接口实施案例一
  5. VTK:帧率用法实战
  6. 将一个项目中已有的文档添加到另一个项目中的方法
  7. Leet Code OJ 27. Remove Element [Difficulty: Easy]
  8. 【转】vue项目打包上传的步骤和方法
  9. chrome同步_如何在Chrome中打开或关闭同步
  10. 一步步分析-C语言如何面向对象编程
  11. Spark之SparkSQL数据源
  12. 路由器配置vlan桥接
  13. Git diffmerge 工具的配置及问题解决
  14. 就国内而言,读大学的意义是什么?
  15. 卡通头像生成器Avataaars generator
  16. Linux aarch64交叉编译之 weston窗口管理程序
  17. vue 存取、设置、清除cookie
  18. ThinkPHP框架安装介绍
  19. int在c语言中能输出负数么,为什么使用模数时C ++输出负数?
  20. win10兼容哪些版本的mysql_win10兼容SQL哪个版本?

热门文章

  1. 浅析绿萝算法下网站友链的交换策略和处理方法
  2. UML学生成绩管理系统
  3. WIN32编程经验总结
  4. 择时策略 —— 基于扩散指标的沪深300指数择时
  5. CDUT新生赛wp re方向(逆向分析
  6. Html5版全套股票行情图开源了
  7. pku1160 Post Office
  8. JAVA程序员工作常用英语(细心整理)计算机常用英语汇总
  9. XCTF Web 高手区007: NewsCenter
  10. java 创建临时临时文件