两个关于ShowWindow的问题,百思不得其解,望高人解惑!

aplnn 2003-11-28 11:19:26
其一:调用ShowWindow(SW_HIDE)之后,窗口消失,然后调用ShowWindow(SW_SHOW|SW_RESTORE),为什么窗口会是最小化状态而没有自动显示出整个窗口。
其二:在进程A中调用ShowWindow(SW_HIDE)使进程B的窗口消失,然后仍然在进程A中调用ShowWindow(SW_SHOW|SW_RESTORE),为什么进程B的窗口不会响应仍然是HIDE的状态。
望高人指点!
...全文
1199 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jruv 2003-11-29
  • 打赏
  • 举报
回复
1.ShowWindow(SW_SHOWNORMAL);就可以了阿
2.你是怎样获得B的句柄的阿?
有可能这个时候你获得的句柄无效了。试试重新获得一次!
NewFree 2003-11-29
  • 打赏
  • 举报
回复
1.ShowWindow(SW_SHOWNORMAL

2.findwindow得到b的窗口句柄,再showwindow一定是好用的!

lovenoend 2003-11-29
  • 打赏
  • 举报
回复
1.ShowWindow(SW_SHOWNORMAL)

2.调用ShowWindow(SW_SHOWNORMAL)前, 先IsWindow判断句柄是否还有效
若无效试试重新获得一次!
shootingstars 2003-11-29
  • 打赏
  • 举报
回复
是不是那个窗口没有恢复显示而是在闪烁呢?如果是的话看看下面的解释:
Windows 98/Me, Windows 2000/XP: The system restricts which processes can set the foreground window. A process can set the foreground window only if one of the following conditions is true:

The process is the foreground process.
The process was started by the foreground process.
The process received the last input event.
There is no foreground process.
The foreground process is being debugged.
The foreground is not locked (see LockSetForegroundWindow).
The foreground lock time-out has expired (see SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo).
Windows 2000/XP: No menus are active.
With this change, an application cannot force a window to the foreground while the user is working with another window. Instead, SetForegroundWindow will activate the window (see SetActiveWindow) and call the FlashWindowEx function to notify the user.

载自msdn中关于SetForegroundWindow
zzz1228 2003-11-29
  • 打赏
  • 举报
回复
up
Goldbach 2003-11-29
  • 打赏
  • 举报
回复
就用ShowWindow(SW_SHOWNORMAL).
  • 打赏
  • 举报
回复
对于一个窗口来说,句柄是不变的,如果改变了就一定不是原来的窗口了,如果你要控制进程B的窗口,为了稳妥起见,应该在每次需要句柄的时候调用IsWindow判断句柄是否还有效,如果没有应该重新查找。
keiven 2003-11-29
  • 打赏
  • 举报
回复
就用ShowWindow(SW_SHOWNORMAL).你的第二个问题应该是句柄失效了.因为一个窗口的句柄并不是不变的,你在把它隐藏以后可能已经改变了.
greensofter 2003-11-28
  • 打赏
  • 举报
回复
不能这么用ShowWindow(SW_SHOW|SW_RESTORE),直接ShowWindow(SW_SHOWNORMAL);
dailiangcm 2003-11-28
  • 打赏
  • 举报
回复
1.试试这样做
ShowWindow(SW_SHOW);
ShowWindow(SW_SHOWNORMAL);
2.到底是进程还是线程?
如果是进程,那么你在进程A中是怎么得到进程B的窗口句柄的,如果是用的findwindow得到的,你看看在b隐藏之后句柄是否还有效?
如果是我来控制其它进程,我会使用postmessage来实现

16,551

社区成员

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

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

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