环境:VS2005 C# WindowsXP众所周知,你双击启动一个应用程序,该程序的窗体即加载并被置于顶层。这似乎是再正常不过的现象了。现在有个问题:
当该窗体尚未加载完时,我就将另外一个窗体置于顶层,比如切到了一个游戏的界面(游戏界面全屏)。接下来问题就出现了:先前的窗体加载完毕,它会被系统再次置顶,而游戏窗口则被最小化。而这并不是我的意愿。大家恐怕也有类似经历:当你游戏中激战正酣时,突然某个窗口弹了出来,当你再切回游戏,发现自己的英雄已经不幸阵亡了。先前我以为这些弹出的窗体是它们自己要抢占顶层位置。后来经我测试并非如此。这其实是系统做的。即一个程序的主窗体加载完毕后,系统都要将其置顶。我想请教下:如何设计才能让窗体加载完成后不会被自动置顶?还是拿前面例子说,我的一个程序在游戏运行期间加载了,它不会弹出来破坏游戏界面。而是当我把游戏最小化后,才能看到这个窗体。

解决方案 »

  1.   

    我没有特意给他加这功能。我还拿 Word试了下。打开魔兽,切出来,启动Word,马上切回魔兽--片刻后Word把魔兽给弹出来了。
      

  2.   

    调系统API,将焦点转移到游戏界面
      

  3.   

    经过一些测试,现在把问题重新整理下:先做一个最简单的WinForm窗体,load函数中Sleep(2000)。打开魔兽,再切回桌面。启动WinForm窗体,然后切回魔兽。大约两秒后什么事情也未发生。再切回桌面,发现那个WinForm窗体已经显示出来了。接下来,我不是直接打开简单WinForm窗体,而是在另一个程序中(也很简单,就一个按钮,按钮事件中启动那个最简单的WinForm窗体)启动它。切回魔兽,两秒后,魔兽被弹出来了。明显这是windows一个系统特性,如果程序A是被其它程序所启动,而不是用户手动启动。那么程序A的窗体在加载完毕后就会抢占顶层位置。我现在需要的就是不让它抢占顶层位置。
      

  4.   

            [DllImport("User32.dll ", EntryPoint = "SetParent")]
            public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);窗体Load事件函数中:SetParent(IntPtr.Zero, IntPtr.Zero);这样它就不会弹了。目前试用效果不错。