当前窗口与活动窗口的区别

活动窗口:用于获取当前线程中用于接收消息的窗口句柄。这个是相对线程来说的。假设一个程序有多个窗体,每个窗体由一个线程控制。窗口_取活动窗口(线程ID)得到当前程序中活动窗体的窗口句柄。如果当前程序不是调用该函数的程序,则就会返回0.这也说明了这个命令是相对线程的,也可以说是相对于该程序的。如果窗口_取活动窗口(0)相当于窗口_取当前窗口()。如果窗口_取活动窗口(线程ID)每个程序都能取到句柄,说明线程ID有问题,线程ID此刻等于0.

当前窗口:得到的是当前最前端窗口,也就是激活的、有焦点的、接收键盘消息的窗口。这是相对系统来说的。注意这里不一定是最前面的窗口,同时还要满足有焦点这个条件。

--------------------------------------------------------------------------------------------

小实验:一个程序创建三个窗口:_启动窗口,窗口1,窗口2。在_启动窗口上有两个按钮,分别用来载入窗口1,窗口2

            在_启动窗口上加个时钟,时钟间隔设置为1秒。

.版本 2

.子程序 _时钟1_周期事件      //启动窗口,时钟事件
.局部变量 主线程

主线程 = 窗口_取窗口线程ID (_启动窗口.取窗口句柄 ())
输出调试文本 (到文本 (窗口_取活动窗口 (主线程)))            //取得启动窗口的主线程,当用按钮切换窗口时,发现输出当前活动窗口的句柄在不断变化

  //经过实验这里的线程不一定是主线程,程序的其他窗口线程ID同样是有效的,即也可以获得其他活动窗口的窗口句柄。不过其他线程一开始没有值。这也决定了其他线程也可以调用这个命令。

----------------------------------------------------------------------------------------------

窗口_取活动窗口(0),则相当于窗口_取前台窗口()

----------------------------------------------------------------------------------------------

窗口_取活动窗口(线程ID),如果切换到其他进程,则返回0。这样就局限在这个线程了。0表示已经跳出这个线程了。所以0也是很有意义的。

窗口_取前台窗口()则基本都有句柄返回。

---------------------------------------------------------------------------------------------

总结一下:窗口_取活动窗口(线程ID)只局限于该线程的程序,当该程序处于获得焦点的状态时,才能获得该程序活动窗口的句柄,否则获取的是0。

               窗口_取前台窗口()         获得当前取得焦点窗口的句柄,不局限于某一个程序。

posted on 2011-06-15 22:02  wanghj_dz  阅读(4818)  评论(0编辑  收藏  举报

导航