腾讯面经攻略(windows桌面开发)一

腾讯面经攻略总结(windowsPC端桌面开发)一

详细说明windows消息机制

(长文字烧脑警告!!!!!)

Windows消息机制是由消息队列、消息循环、消息处理(窗口处理过程)三部分组成

1、什么是消息队列?
Windows为所有消息维护着一个系统消息队列,而对于每个应用程序的GUI线程,系统又将会创建一个对应的消息队列。Windows根据消息结构的内容将不同的消息发送给相应GUI线程的消息队列。GUI线程通过消息循环获取并分发消息到某个指定的窗口。
注意:每个UI线程一个消息队列,而不是每个窗口一个消息队列,只有当一个线程调用Win32 API中的GDI(Graphics Device Interface)和User函数时,操作系统才会将其看成是一个GUI线程,并为它创建一个消息队列。
2、消息循环
通过Windows消息循环机制,应用程序能从消息队列中检索消息,再把他们分发个适当的窗口机进行处理。然后再检索再分发等。
GetMessage函数定义如下:
BOOL WINAPI GetMessage(
Out LPMSG lpMsg, //从线程消息队列中接收消息的MSG结构体指针
In_opt HWND hWnd, //指定获取哪个窗口的消息,窗口句柄必须属于该线程
In UINT wMsgFilterMin, //指定获取消息的最小值
In UINT wMsgFilterMax //获取消息的最大值
);
消息循环以GetMessage函数调用开始,它从线程消息队列中取出一个消息,当取出的消息为WM_QUIT(退出消息)。消息循环和应用程序退出。TranslateMessage函数将键盘按键的虚拟码转换为ASCII码,同时将WM_CHAR消息发送到消息队列中。DispatchMessage函数将消息转发给Windows操作系统来调用相应窗口的处理过程。如果消息队列为空,应用程序就将控制权交还给Windows。如果有需要控制权的应用程序,Windows就将控制权转交给应用程序。这种控制权的交换使得Windows成为多任务的操作系统。
3、消息处理(窗口处理过程)
窗口处理过程是用来接收传递给窗口的消息,它的任务就是获取消息,然后响应消息。任何一个窗口类都有一个窗口处理过程。同一个类的窗口使用同样的窗口过程来相应消息。窗口处理过程是一个回调函数(Callback Function),它是由Windows操作系统负责调用的,而应用程序本身不能调用它。消息的处理是由窗口过程完成的,窗口处理过程处理了一个消息后,通常要返回一个值给Windows。系统发送消息给窗口处理过程,通常将消息数据作为参数传递给它。消息到来之后,窗口处理过程按照消息类型的排序进行处理,其中的参数则用来区分不同的消息。同时,窗口处理过程使用参数产生合适的行为。

Windows的操作会产生大量的不同种类的消息,窗口处理函数不可能处理所有的消息,只处理需要的消息,其他的消息就交给系统处理。DefWindowProc就是系统提供的消息处理过程。

重载和重写的区别:

(1)范围区别:重写和被重写的函数在不同的类中,重载和被重载的函数在同一类中。
(2)参数区别:重写与被重写的函数参数列表一定相同,重载和被重载的函数参数列表一定不同。
(3)virtual的区别:重写的基类必须要有virtual修饰,重载函数和被重载函数可以被virtual修饰,也可以没有。

隐藏和重写,重载的区别:

(1)与重载范围不同:隐藏函数和被隐藏函数在不同类中。
(2)参数的区别:隐藏函数和被隐藏函数参数列表可以相同,也可以不同,但函数名一定同;当参数不同时,无论基类中的函数是否被virtual修饰,基类函数都是被隐藏,而不是被重写。
重载:是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。
隐藏:是指派生类的函数屏蔽了与其同名的基类函数,注意只要同名函数,不管参数列表是否相同,基类函数都会被隐藏。
重写(覆盖):是指派生类中存在重新定义的函数。其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致。只有函数体不同(花括号内),派生类调用时会调用派生类的重写函数,不会调用被重写函数。重写的基类中被重写的函数必须有virtual修饰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值