在线等: 关于"让窗体最前"问题的新问题
可以用SetWindowPos(&m_pMainWnd->wndTopMost, 0, 0, 0, 0, SWP_NOSIZE)让窗体最前,
但个人感觉这个函数太霸道, 窗体一旦最前,系统如果有MessageBox也给挡住.
所以想用 ShowWindow(SW_SHOWNORMAL);
SetForegroundWindow();
但问题是,这两个函数只能好用一次,后续只能使Frame闪烁,并不能显示窗体内容;拿鼠标点一下才可以.有什么方法可以做到将窗体调整到最前,并且正常显示呢?
测试的工程如下:
1.新建一个SDI工程,在MainFrame的OnCreate中加SetTimer(1,3000,NULL);
2.加OnTimer,加入 ShowWindow(SW_SHOWNORMAL);SetForegroundWindow();
测试结果发现: 运行程序,只第一个3秒可以将窗体调到了前台,后面的3秒均是闪烁.
问题点数:100、回复次数:13Top
1 楼vcleaner(我没当大哥很久了.......)回复于 2004-12-03 12:19:30 得分 1
在OnPaint中试试Top
2 楼luoxg(累累累)回复于 2004-12-03 12:25:19 得分 0
一样,还是闪烁,不能调整到前面正常显示.Top
3 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-12-03 12:28:45 得分 30
请楼主阅读一下<Windows核心编程>p649
“为了制止这种现象,微软对SetForegroundWindow函数增加了更多的智能。特别规定,仅当调用一个子函数的线程已经连接到RIT或者当前与RIT相连接的线程在一定的时间内(这个时间量由SystemParamtersInfo函数和SPI_SETFOREGROUND_LOCKTIMEOUT值来控制)没有仍然输入,这个函数才有效。另外,如果有一个菜单是活动的,这个函数就失效。”Top
4 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-12-03 12:32:51 得分 10
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,0,0,0);
AllowSetForegroundWindow(ASFW_ANY);
SetForegroundWIndow(m_hWnd);Top
5 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-12-03 12:33:57 得分 10
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,0,0,0);
之前最好将将原来的值保存,窗口到前台后再还原,以免影响系统中其它程序的行为。Top
6 楼roger_ding(海天一色)回复于 2004-12-03 12:35:03 得分 25
1. SetWindowPos(&m_pMainWnd->wndTopMost, 0, 0, 0, 0, SWP_NOSIZE)
2. SetWindowPos(&m_pMainWnd->wndNoTopMost, 0, 0, 0, 0, SWP_NOSIZE)Top
7 楼hjunxu(hjun)回复于 2004-12-03 12:36:53 得分 1
我也有类似的问题,不过只在背后一个窗口是fullscreen的时候才有。
顶一下。
楼主的问题不知道用折中的设置可不可以?
用BringWindowToTop ,或在setwindowpos的时候用HWND_TOP.Top
8 楼hjunxu(hjun)回复于 2004-12-03 12:37:49 得分 1
那样就没有那么霸道了,是个折中的办法。Top
9 楼Trashy(【叶落随风】)回复于 2004-12-03 12:42:50 得分 1
你的要求也有些高了吧Top
10 楼aoosang(智慧的鱼)回复于 2004-12-03 12:49:13 得分 1
接分Top
11 楼luoxg(累累累)回复于 2004-12-03 12:52:21 得分 0
去试试,一会回来...Top
12 楼blackboxboyb(jin)回复于 2004-12-03 14:52:49 得分 20
SetWindowPos(&m_pMainWnd->wndTopMost, 0, 0, 0, 0, SWP_NOSIZE)
以后 再调用
SetWindowPos(&m_pMainWnd->wndNoTopMost, 0, 0, 0, 0, SWP_NOSIZE)
这样就可以了!Top
13 楼luoxg(累累累)回复于 2004-12-04 16:53:44 得分 0
多谢各位!Top




