做了个闹钟提醒,到点会跳出一个gif文件,这个文件我放在窗口theForm里了。
实例化这个窗口并设置TopMost=true,结果有时候能跳出来(屏幕最前端),有时候画面
会停在下面一层。这个应该怎么实现啊?好像TopMost不能保证窗口显示在正在前端运行的
其他程序上。
是不是因为其他活跃的进程占据了窗口最前端,这个窗口就不能再在最前端显示了?如果是这样
的话是不是应该调用API(这个我不怎么懂)里的类似setwindowpos之类的函数啊?代码怎么
实现啊?

解决方案 »

  1.   

    弹出的窗体  from1.showdialog()
      

  2.   

    你试试加个Timer在Timer事件里面设置TopMost = true
      

  3.   

    采用ShowDialog()显示模式对话框,不过会阻塞当前线程直到该对话框关闭。最好是搞清楚模式对话框与非模式对话框的区别
      

  4.   

    试试用api,在实例化之后调用SetForegroundWindowBOOL SetForegroundWindow(
        HWND hWnd  // handle of window to bring to foreground
       );
      

  5.   

    前面几个兄弟的方法都试过了,不行的。
    还有4楼和6楼的两个方法没有试过,我是在线程中实例化并显示窗口的。
    后来又看了一篇文章,说是辅助线程里面不应该实例化UI的。
    是不是用Timer就能够避免这个问题呢,我明天试一下!前面几个仁兄提到的TopMost属性,其实这个属性的说明好像是“当别的当前窗口没有TopMost=true的时候,才在最前端显示”(VS2005-〉打开一个窗口-〉点TopMost属性的显示),是不是因为一个别的程序比如word占据了程序的最前端的时候,这个闹钟程序就不能弹出在最前端了?进程又没有前台和后台之分啊,如果是的话能不能在到点提醒的时候让这个进程到前端运行,这个应该怎么实现阿?
      

  6.   

    这个问题今天搞定了。
    本来是在辅助线程实例化窗体又ShowDialog的,今天改成Timer控件做了。
    莫非是辅助线程实例化UI确实有问题?关于API,我没有试,不知道行不行,总之谢谢各位兄弟的帮忙了。
    分不多,大家分了吧