GetHostWnd() 与 GetActiveWindow() 的用法区别
来源:互联网 发布:淘宝虚拟物品怎样退款 编辑:程序博客网 时间:2024/06/08 19:37
一、引言
最近工作中遇到了一点小问题:
首先我在主窗口上创建了两个子窗口,然后想要让其中的一个子窗口置顶。
但是很无奈,使用了 SetWindowPos() 方法怎么都置不了顶,反而还被另外一个子窗口一直压在下面;
更奇怪的是:当我切换了其他程序后,再切换回来,我想要置顶的子窗口就置顶了。
这是一个奇怪的问题,最后在老大的帮助下解决了这个问题。
是因为我在主窗口下创建子窗口时,使用了:
GetHostWnd()
函数来设置 CreateWindow()
函数中的父窗口句柄;
这里更换成为:
GetActiveWindow()
函数就可以了。
二、让我们深入探索:为什么将 GetHostWnd() 更换成 GetActiveWindow() 就可以了
解决了问题并不代表一切,我们仍然需要去研究为什么。
那么,这是为什么呢?
这里我们来查看下 MSDN 对于这两个函数的解释:
GetHostWnd() 函数
CWnd* GetHostWnd();返回指向主窗口的指针。
GetActiveWindow() 函数
static CWnd* PASCAL GetActiveWindow();返回指向当前活动窗口的指针。
尤其是注意这里 MSDN 对于 GetActiveWindow() 函数的解释:
The active window is either the window that has the current input focus or the window explicitly made active by the SetActiveWindow member function.
翻译如下:
活动窗口是指拥有输入焦点的或者是由 SetActiveWindow 函数明确指明为活动窗口的窗口。
那么,这里之前的问题就迎刃而解了。
之前我在主窗口中,已经让第一个子窗口置顶了;此时,我继续设置了主窗口为第二个子窗口的父窗口,导致第二个子窗口根据主窗口为基点,显示置顶,然而还是被第一个子窗口盖住了。
为什么呢?因为当前的活动窗口并非是主窗口,活动窗口是第一个子窗口,所以此时第二个子窗口无法显示置顶。
那么此时,我只需要将当前的活动窗口(也就是第一个子窗口获取到)设置为第二个子窗口的父窗口,在活动窗口的基点上进行第二个子窗口的置顶操作,就可以完成预想的功能了。
三、总结
有时候我们在开发过程中遇到的几个容易混淆的函数,看似功能差不多,其实蕴含了深刻的底层的知识。
面对这样的函数,我们需要做的就是力求甚解。甚至在很多时候,我更加推崇直接看对应技术的官方文档(英语是很重要的)。
很久没更新博客了,依然在路上。
To be Stronger.
- GetHostWnd() 与 GetActiveWindow() 的用法区别
- GetActiveWindow与GetForegroundWindow的区别
- GetForegroundWindow 与 GetActiveWindow 的区别
- GetActiveWindow与GetForegroundWindow两者有何区别?
- FindWindow,GetActiveWindow函数用法
- GetActiveWindow
- map的用法与区别
- innerHTML与innerText的用法与区别
- getParameter与getAttribute的用法与区别
- innerHTML与innerText的用法与区别
- extern 与 static的用法与区别
- sizeof与strlen的用法与区别
- mybatis #与$的区别与用法
- frame与iframe的用法与区别
- mysql与mysqli的区别与用法
- setTimeout与setInterval的用法及区别
- typedef和#define的用法与区别
- typedef和#define的用法与区别
- Linux下的FILE*结构体
- sftp连接--文件下载
- textview禁止点击
- MySQL5.7.18 源码安装详细步骤
- 指针与数组
- GetHostWnd() 与 GetActiveWindow() 的用法区别
- 详细解释CNN卷积神经网络各层的参数和链接个数的计算
- Linux查看日志命令
- Java基础练习题 (4)数组操作
- Retrofit常用方法入门
- 使用soapUI测试WebService
- 补2,实验5.5
- 多态
- Thrift实现C#调用Java开发步骤详解