MFC所有封装类一共200多个,但在MFC的内部技术不只是简单的封装

MFC的内部总共有六大关键技术,架构起了整个MFC的开发平台

一.MFC的六大关键技术包括:

a).MFC程序的初始化过程

b).消息映射机制

c).运行时类型识别(RTTI)

d).动态创建

e).永久保存

f).消息传递

六大关键技术的目的是为了提高开发效率,开发者只要在局部做简单的修改,即可处理大部分窗口事物

二.SendMessage和PostMessage函数的功能

a).能够向指定的窗口内发送窗口消息。既可以是本进程内窗口也可以是其他进程的

b).既可以发送系统内部消息,消息编号的范围是:1-WM_USER-1)

例如:WM_LBUTTONDOWN, WM_MOUSEMOVE等

c).也可以发送非系统消息(开发者定义的消息),范围号是:WM_USER-0x7FFF

d).在MFC下非系统消息映射,使用宏定义时ON_MESSAGE

三.SendMessage和PostMessage函数的区别是:

a).SendMessage是阻塞型函数,PostMessage函数是非阻塞型函数

SendMessage用于调用指定窗口的内部程序,直到窗口程序处理完成以后再返回

PostMessage是将一个消息寄送到一个窗口内的消息队列后就立即返回

b).两个函数的返回值不同

LRESUL SendMessage(HWND hwnd,UINT Msg,WPARAM wParam,LPARAM lParam);

BOOL PostMessage(HWND hwnd,UINT Msg,WPARAM wParam,LPARAM lParam);

SendMessage的返回值是消息处理结果产生的数值,依赖于消息处理函数

PostMessage的返回值是返送成功或失败,一般很少失败除非窗口不存在

c).跨线程或跨进程发送消息,推荐使用PostMessage函数

模式对话框与非模式对话框

1.模式对话框弹出时,父窗口不能操作

2.非模式对话框的弹出是独立的,可以操作父对话框,在windows下的状态栏可以看到弹出窗口是个独立的窗口,这点需要用GetDesktopWindow()函数

非模式对话框必须在堆内申请对象,或在成员变量内申请对象

3.对于关闭窗口函数OnOK()、OnSysCommand()、OnClose()、OnCancel()、OnDestroy()

OnSysCommand()函数管理所有系统菜单和系统按钮消息

OnClose(),WM_CLOSE消息是WM_SYSCOMMAND的一个专用关闭的分支,而OnClose()里面又调用OnCancel()函数,这个函数继承了EndDialog()函数

OnSysCommand()->OnClose()->OnCancel();

CDialog::OnOK首先调用UpdateData(TRUE)将数据传给对话框成员变量,然后调用CDialog::EndDialog关闭对话框;

   CDialog::OnCancel只调用CDialog::EndDialog关闭对话框;

  参考:

 点“确定”、“取消”时的关闭路由为 
OnOK()或OnCancel() ---> EndDialog() ---> DestroyWindow() ---> OnDestroy() ---> PostNcDestroy() 
点“关闭”标题栏按钮的关闭路由为 
OnClose()---> DestroyWindow() ---> OnDestroy() ---> PostNcDestroy()

windows程序设计(三)的更多相关文章

  1. Windows 程序设计

    一.Win32 API /******************************************************************** created: 2014/04/1 ...

  2. windows 程序设计 SetPolyFillMode关于ALTERNATE、WINDING的详细解释

    看windows程序第五章GDI编程部分.一直卡壳在这里了. 下面我来说下自己的想法.看是否对您有帮助. 首先我们来看一个图. SetPolyFillMode(ALTERNATE);  // 系统默认 ...

  3. Windows程序设计学习笔记(1):一个简单的windows程序

    <Windows程序设计>(第五版)(美Charles Petzold著) #include<windows.h> LRESULT CALLBACK WndProc(HWND, ...

  4. Windows 程序设计(4) MFC 03 -系列学习

    本文整体目录和绝大部门内容来自 [鸡啄米网站]的MFC系列文章,欢迎支持原创 (一)VS2010/MFC编程入门之前言 VC++全称是Visual C++,是由微软提供的C++开发工具,它与C++的根 ...

  5. 关于《Windows程序设计(第五版)》中一个实例程序的疑问

    最近一直在看Charlse Petzold的<Windows程序设计>,作为一个新得不能再新的新手,只能先照着书的抄抄源码了,之前的例子一直都很正常,但昨天遇到一个很诡异的BUG. 先看实 ...

  6. windows 程序设计自学:添加图标资源

    #include <windows.h> #include "resource.h" LRESULT CALLBACK MyWndProc( HWND hwnd, // ...

  7. windows程序设计笔记

    2014.05.06 新建一个visual C++ -- 常规 -- 空白 的项目,用.c后缀名指定这是一个用C语言来写的windows项目.和C语言的hellworld程序做了一个比较,按照wind ...

  8. 《Windows程序设计第5版》学习进度备忘

    书签:另外跳过的内容有待跟进 __________________学习资源: <Windows程序设计第5版珍藏版> __________________知识基础支持: _________ ...

  9. MFC Windows程序设计源代码免费下载

    本人近期在网上找到了<MFC Windows程序设计>第二版的书内程序的源代码,特意上传CSDN上面,供学习MFC的程序猿们免费下载. 源代码下载: http://download.csd ...

  10. windows程序设计简介

    大家好,非常高兴和大家一起分享Windows开发心得,Windows已经诞生很多年了,一直因为它的简单易用而深受欢迎,相信很多人在使用Windows的时候,一定有这样一个想法:希望自己将来可以写一个很 ...

随机推荐

  1. .net大型分布式电子商务架构说明(转载来自<头条>)

    背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控. 架构演变 基础框架剥 ...

  2. HDtune(硬盘检测) V5.5 中文绿色版

    软件名称:HDtune(硬盘检测) V5.5 中文绿色版软件语言: 简体中文授权方式: 免费软件运行环境: Win 32位/64位软件大小: 565KB 图片预览: 软件简介:HD Tune Pro一 ...

  3. AJAx 刷新页面

    <html><head> <meta http-equiv="Content-Type" content="text/html; chars ...

  4. 项目中 添加 swift代码 真机调试 错误

    错误: dyld: Library not loaded: @rpath/libswiftCore.dylib Referenced from: /private/var/mobile/Contain ...

  5. Yii2.0的安装与配置教程

    版权声明:本文为博主原创文章,未经博主允许不得转载. PHP版本需求:PHP5.4.0以上,因为Yii2.0基于PHP5.4以上版本进行了完全重写. 目前有两种方法可以安装Yii2.0,一种是安装Co ...

  6. php精度计算问题

    如果用php的+-*/计算浮点数的时候,可能会遇到一些计算结果错误的问题,比如echo intval( 0.58*100 );会打印57,而不是58,这个其实是计算机底层二进制无法精确表示浮点数的一个 ...

  7. 怎么取消ie浏览器body与html的间隙

    在css文件第一行定义全局样式,可以消除html标签默认间隙*{margin:0;padding:0;}

  8. void与void*详解

    void关键字的使用规则: 1. 如果函数没有返回值,那么应声明为void类型: 2. 如果函数无参数,那么应声明其参数为void: 3. 如果函数的参数可以是任意类型指针,那么应声明其参数为void ...

  9. json处理三部曲之第一曲:利用json-lib-xxx.jar处理json

    json-lib-xxx.jar包必需5个依赖包(实测): ezmorph-xxx.jar commons-lang-xxx.jar commons-beanutils-xxx.jar commons ...

  10. MFC滚动条实现要点

    MFC滚动条实现要点 1.鼠标拖动滚动条从而滚动窗口,需要实现CDialog::OnVScroll()函数.根据传入参数nPos,计算滚动距离.最后再调用ScrollWindow()和SetScrol ...