活动窗口(Active),焦点窗口(Focus),IsDialogMessage,
来源:互联网 发布:java buffer转string 编辑:程序博客网 时间:2024/05/21 11:13
任何一个时候,我们的Windows桌面上总有一个最前台的窗口,其实说简单的,就是标题栏变成深蓝色的那个窗口,仅此一个,这个窗口就是前景窗口(Foreground Window),其他窗口就是后台窗口(Background Window)。那创建前景窗口的线程就是前景线程(Foreground Thread),这个线程并不一定就是应用程序的主线程。
线程内部会维护当前自己的活动窗口(Active Window)和焦点窗口(Focus Window),焦点窗口其实只是窗口的一个属性,其实就是“焦点状态”是窗口的一个属性,而焦点窗口的顶层窗口就是活动窗口,举个例子:一个对话框中有一个按钮,当按钮获得焦点的时候,那此按钮就是焦点窗口,则包含此按钮的对话框就是活动窗口,若出现窗口嵌套的情况,则最根的那个窗口才是活动窗口。
上面2段已经分别描述了前景窗口,活动窗口和焦点窗口的一些情况,可是前景窗口和活动窗口又是什么区别呢?
焦点窗口只是一个局部的概念,并不是所有的焦点窗口都可以获得键盘事件。只有前景线程的焦点窗口才能从系统队列中得到键盘事件(所以要SetFocus()),而前景线程中的活动窗口是前景窗口。在任何时刻系统中都只可能有一个被激活的窗口,这就是前景窗口。这也就回答了上一节中的问题:与系统队列相连接的线程就是前景线程,而那个可以得到键盘事件的窗口就是前景线程的焦点窗口。(以上文字引自开头的文章)
相信仔细理解一下这些描述,应该能对你有所帮助了。
尽管IsDialogMessage函数是为无模态对话框而扩展的,但可以用含有控制的任何一个窗口来使用它。当 IsDialogMessage处理一个消息时,它检测键盘信息并把它们转变成对响应对话框的选择命令。例如当按下tab时选择下一个控制或控制组,当按下down时选择控制组的下一个控制。因为IsDialogMessage 函数要执行消息所有必要的转变和传送,IsDialogMessage函数处理的消息不必传送给TranslateMessage或 DispatchMessage函数处理。 IsDialogMessage函数把WM_GETDLGETDLGCODE发送到对话框应用程序,决定应该处理哪个键。 lsDialogMessage函数把DMa_ETDEFID和DM_SETDEFID消息发送到窗口。这些消息在WINUSERH头文件中定义为WM_USER和WM_USER+1所以就有与应用程序定义的有一样值的消息发生冲突。
如何解释WndProc的返回值,依赖于不同的消息,可以参考特定消息的相关说明。
如何解释WndProc的返回值,依赖于不同的消息,可以参考特定消息的相关说明
- 活动窗口(Active),焦点窗口(Focus),IsDialogMessage,
- 活动窗口(Active),焦点窗口(Focus)和前景窗口(Foreground)之间的关系
- 活动窗口(Active),焦点窗口(Focus)和前景窗口(Foreground)之间的关系
- 活动窗口(active),焦点窗口(focused),前台窗口(foreground)的区别
- 理解焦点窗口,活动窗口与前景窗口
- 获取活动窗口输入焦点控件句柄的方法
- 窗口焦点问题
- 窗口焦点模型分析
- 父子窗口焦点问题
- MFC 窗口获取焦点
- 窗口,控件:捕捉焦点
- 查看当前活动窗口
- IsDialogMessage
- 窗口的PreviewKeyDown事件与Focus函数
- 窗口的PreviewKeyDown事件与Focus函数
- 窗口激活-无焦点窗口禁止激活
- 判断窗口是否是活动窗口
- windows程序窗口层次Z-order,顶层窗口,前台窗口,后台窗口,兄弟窗口,活动窗口
- [转]C++高进度测试程序运行的时间
- C# 用户自定义UserControl控件使用
- android 源码下载过程和工具速览
- 【成功之路】 让人喜欢的30个原则
- 从内存DC创建bmp文件
- 活动窗口(Active),焦点窗口(Focus),IsDialogMessage,
- DM-V-VM
- linux常用命令
- C#中使用Property Grid 控件 学习笔记(一)
- To Excel(XML)
- 区分strcmp 与strncmp 、strcpy与strncpy
- 刚开通博客,希望记录自己的一些经历
- UVa Problem 10160 Servicing Stations (服务站)
- 常用排序算法的c++实现(冒泡,选择,插入,堆,shell,快速,归并 )与sort()对比