windows程序设计(三)
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程序设计(三)的更多相关文章
- Windows 程序设计
一.Win32 API /******************************************************************** created: 2014/04/1 ...
- windows 程序设计 SetPolyFillMode关于ALTERNATE、WINDING的详细解释
看windows程序第五章GDI编程部分.一直卡壳在这里了. 下面我来说下自己的想法.看是否对您有帮助. 首先我们来看一个图. SetPolyFillMode(ALTERNATE); // 系统默认 ...
- Windows程序设计学习笔记(1):一个简单的windows程序
<Windows程序设计>(第五版)(美Charles Petzold著) #include<windows.h> LRESULT CALLBACK WndProc(HWND, ...
- Windows 程序设计(4) MFC 03 -系列学习
本文整体目录和绝大部门内容来自 [鸡啄米网站]的MFC系列文章,欢迎支持原创 (一)VS2010/MFC编程入门之前言 VC++全称是Visual C++,是由微软提供的C++开发工具,它与C++的根 ...
- 关于《Windows程序设计(第五版)》中一个实例程序的疑问
最近一直在看Charlse Petzold的<Windows程序设计>,作为一个新得不能再新的新手,只能先照着书的抄抄源码了,之前的例子一直都很正常,但昨天遇到一个很诡异的BUG. 先看实 ...
- windows 程序设计自学:添加图标资源
#include <windows.h> #include "resource.h" LRESULT CALLBACK MyWndProc( HWND hwnd, // ...
- windows程序设计笔记
2014.05.06 新建一个visual C++ -- 常规 -- 空白 的项目,用.c后缀名指定这是一个用C语言来写的windows项目.和C语言的hellworld程序做了一个比较,按照wind ...
- 《Windows程序设计第5版》学习进度备忘
书签:另外跳过的内容有待跟进 __________________学习资源: <Windows程序设计第5版珍藏版> __________________知识基础支持: _________ ...
- MFC Windows程序设计源代码免费下载
本人近期在网上找到了<MFC Windows程序设计>第二版的书内程序的源代码,特意上传CSDN上面,供学习MFC的程序猿们免费下载. 源代码下载: http://download.csd ...
- windows程序设计简介
大家好,非常高兴和大家一起分享Windows开发心得,Windows已经诞生很多年了,一直因为它的简单易用而深受欢迎,相信很多人在使用Windows的时候,一定有这样一个想法:希望自己将来可以写一个很 ...
随机推荐
- 亲身体验:Vultr超高性价比VPS评测教程
最具性价比的vps是哪家?综合考虑vps稳定性.机房速度.vps硬件配置,美国linode一度是vps市场里的王牌:digitalocean vps迅速介入云主机市场,SSD固态硬盘性能秒杀竞争对手, ...
- Java 容器一些知识
一.Collection 1.static 方法: Collections.sort(List<T>):实现List排序功能 Collections.fill(List<T> ...
- Chapter 14_2 全局变量声明
Lua中的全局变量不需要声明就可以使用.对于小程序十分方便,但是大型程序中 一处简单的笔误就可能造成难以发现的bug. 不过,这种性能可以改变.由于Lua将全局变量放在一个普通的table中,可以通过 ...
- [Jmeter]jemeter启动报错,返回错误码 5,处理方法
今天在使用jmeter的时候,启动GUI,发现bat文件执行有告警,告警内容如下: java.util.prefs.WindowsPreferences <init>WARNING: Co ...
- SharePoint 入门书籍推荐 转载来源http://www.cnblogs.com/jianyus/p/3513238.html
最近,总有人说刚入门SharePoint,没有好的资料或者电子书,资料推荐大家多看看博客园和CSDN的博客.对于看博客,我一般是两个思路,要么找一个人的从头到尾看一遍,觉得有意义的,就把地址加收藏:或 ...
- BcdTool(系统启动菜单管理器) v1.0912 绿色版
软件名称: 系统启动菜单管理器(BcdTool)软件语言: 简体中文授权方式: 免费软件运行环境: Win 32位/64位软件大小: 903KB图片预览: 软件简介:BcdTool是一款windows ...
- 快速进入pycharm图形界面
解压后的pycharm相关文件的路径:/home/hadoop2/下载/pycharm-community-4.5.4 添加快速启动pycharm命令: (1)进入/usr/local/sbin这个目 ...
- 基于Flash与window平台本地程序通信实现媒体流发布
0 Web场景下的媒体流发布可以采用Flash原生API实现,但是Flash H264视频压缩参数不可控.音频无法AAC编码,所以一般采用浏览器插件方式,但是浏览器插件有版本兼容问题.不稳定,所以可以 ...
- hdu5573 二叉树找规律,二进制相关
input T 1<=T<=100 n k 1<=n<=1e9 n<=2^k<=2^60 output 从1走到第k层,下一层的数是上一层的数×2或者×2+1,每 ...
- iOS中控制器的释放问题
iOS中控制器的释放问题 ARC工程是可以重写dealloc方法并被系统调用的,但不需要手动调用父类的dealloc,手写[super dealloc]方法会报错,事实上系统会自动帮你调用父类的dea ...