《深入浅出MFC》学习笔记一 : Win32基本程序概念 (转)

本文转载至http://blog.chinaunix.net/uid-20782170-id-3141818.html

 Windows程序运行的本质:Message based, Event driven.(以消息为基础,以事件驱动之)。

学习MFC的必要基础:
1. 对于Windows程序的事件驱动特性的了解(消息的产生、获得、分派、判断、处理);
2.C++多态的精确体会;

一、Windows程序调用的函数分为:
1. C Runtimes 函数库:
分静态链接和动态链接版本;
分单线程和多线程版本;
分Debug和Release版本;
2. Windows API:
GDI32.DLL, USER32.DLL, KERNEL32.DLL.

二、以消息为基础,以事件驱动之
Event 产生消息,消息触发Action.
1).由硬件产生的消息,放在系统队列中,由Windows系统或者程序传送的消息,放在程序队列中;
2).调用GetMessage API取得一个消息(程序的生命靠它来推动);
3).TranslateMessage 转换键盘消息;
4).DispatchMessage 分派消息,通过USER Module的帮助,调到call back函数(窗口函数,每个窗口负责
处理消息的函数,是窗口的生命中枢),进一步处理消息;
while(GetMessage ){
TranslateMessage
DispatchMessage
}

1.MFC中使用了消息映射(Message Map)来触发消息响应函数。
2.PostMessage和SendMessage的区别:
1).PostMessage是将消息放进程序队列中,等待被处理;
2).SendMessage是直接通过USER Module的帮助,调到call back函数;

3.PeekMessage和GetMessage的区别:
如果消息队列中没有消息,线程会挂起,再次照顾到次线程的时候,如果消息队列中还是没有消
息,两者行为不同:
1).PeekMessage会获得控制权,使程序得以执行一段时间;
2).PeekMessage会过门而不入,于是系统会去照顾其他人。

4.程序的退出过程(比如按下菜单中的Close):
1).系统送出WM_CLOSE,通常不被窗口函数处理,DefWindowProc处理它;
2).DefWindowProc会调用DestroyWindow清除窗口,并送出WM_DESTROY;
3).窗口函数调用PostQuitMessage响应WM_DESTROY,只是送出WM_QUIT消息;
4).GetMessage取得消息WM_QUIT后,会退出while循环,程序退出;


三、进程和线程
线程是CPU的调度单位。
内核对象区别于普通对象的标志是:创建对象的时候是否有安全属性参数设置。
SECURITY_ATTRIBUTES,可设置安全属性和继承特性。
进程创建的时候,会自动创建一个主线程。
每个进程都有自己的内核对象表,表项可以被继承、拷贝,从而达到不同进程间共享的目的。
内核对象可以命名,如此可以在其他进程中打开该命名对象,也能实现共享。
创建线程的时候应该调用_beginhtreadx,而不是CreateThread。_beginhtreadx有其他针对平台的特有操作。
线程可以和CPU设置相关性,即设定某个线程只运行在某个CPU上,但是这样比较危险。
每个进程有自己独立的地址空间,每个线程有自己的堆栈(stack),线程还有自己的堆(Heap)。可以根据需要申请多个不同的堆。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值