如何彻底的切换指定程序窗口到前台,或者说获得焦点?

Summer006 2009-09-26 12:40:30
需要实现的是:切换指定hwnd 到前台,并且让其获得焦点。 (不是完全在最上层)
指定的几个hwnd原本都是最大化全屏的,所以切换过去后,要让其全屏。

我目前的问题:切来切去,只能做到切过去后,显示在最前面,但终究没法获得焦点。
比如当前在A窗口,要切到B窗口:第一次切没问题,后面再切就会出现:B程序显示在最前面了,但任务栏上当前窗口还是A窗口,任务栏上面B窗口在闪烁,用户不得不用鼠标点一下,才能完全切到B窗口!

有时候B程序是全屏幕显示的,每次都要人工去弄一下,才能让任务栏消失,很讨厌。希望有彻底的完美的切换办法!除去彻底使用top_most外...

我的目前的源码:

SetWindowPos(hWnd, HWND_TOPMOST, -1, -1, -1, -1, SWP_NOMOVE|SWP_NOSIZE);

SetWindowPos(hWnd, HWND_NOTOPMOST, -1, -1, -1, -1, SWP_NOMOVE|SWP_NOSIZE);

HWND hForegdWnd = ::GetForegroundWindow();

DWORD dwCurID = ::GetCurrentThreadId();

DWORD dwForeID = ::GetWindowThreadProcessId(hForegdWnd, NULL);

::AttachThreadInput(dwCurID, dwForeID, TRUE);

::SetForegroundWindow(hWnd);

::AttachThreadInput(dwCurID, dwForeID, FALSE);

SwitchToThisWindow(hWnd, TRUE);

基本上能搜到的函数都干上了,还是不行!在线等高手解答,并在线测试,可用就立马结贴。
...全文
561 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyster2008 2009-09-26
  • 打赏
  • 举报
回复
setfocus
Summer006 2009-09-26
  • 打赏
  • 举报
回复
罗嗦一句, 末尾再干上一条: SetActiveWindow(hWnd);

仍不顶用!
webing520 2009-09-26
  • 打赏
  • 举报
回复
解决了就好,呵呵呵。
Summer006 2009-09-26
  • 打赏
  • 举报
回复
哈哈, 完美解决!

参考的这位仁兄:

http://blog.csdn.net/felixz/archive/2007/03/28/1544486.aspx

哎,困扰已久的问题终于搞定,不过也有些收获:windows这么做,原来是设计的原因:http://social.microsoft.com/Forums/zh-CN/visualcpluszhchs/thread/820a97dd-5376-46c3-9cfa-03939a10f18b

散分吧~
Summer006 2009-09-26
  • 打赏
  • 举报
回复
setfocus 试过了, 不行。问题依旧。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧