外部窗体:frm1,知道其句柄hwnd1;
  VB编写的一窗体myfrm,我想使myfrm始终处于frm1的前面,但是当选择其它应用程序(同时打开的还有很多)时,myfrm不处于最前面。
  简单的讲,选择frm1则myfrm就在前面(挡住frm1);选择其它程序时myfrm不跳出来。
  如何实现?用SetWindowPos吗?

解决方案 »

  1.   

    用SetWindowPos
    myfrm激活的时候就设置frm1最前
    如果myfrm失去焦点就取消置顶
    否则就用钩子
    比较麻烦点
      

  2.   

    我是要让myfrm始终盖住frm1,而不影响其它应用程序
      

  3.   

    在frm1中顯示myfrm的代碼:myfrm.show vbmodal,frm1
      

  4.   

    如果myfrm失去焦点就取消置顶
    这样就不影响了
      

  5.   

    外部窗体:frm1,知道其句柄hwnd1;嘿嘿很明显有点外挂性质
      

  6.   

    LZ,给你段代码,搞定
    Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As LongPublic Const SWP_NOSIZE = &H1
    Public Const HWND_TOPMOST = -1在Form_Load 中调用一下:Call SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE)
      

  7.   

    To vansoft(Vansoft Workroom):
    frm1是外部程序,我不知道是何种语言所写,只知道其运行时的句柄hwnd1
      

  8.   

    楼上的我也知道,就是使窗体在所有窗口中显示最前;
    但我要的是仅在frm1前显示
      

  9.   

    我倒,那你直接ShowModal不就行了
      

  10.   

    To vansoft(Vansoft Workroom):
    frm1是外部程序,我不知道是何种语言所写,也没有原程序,更不可能修改,仅知道其运行时句柄
      

  11.   

    ShowModal一点用都没有,和外部程frm1没影响
      

  12.   

    在frm1中加如下代码
    myfrm.Show 1
      

  13.   

    你的意思是寫個窗體把其他程序的窗體蓋住.你已經知道他的句柄了,發消息給他,取得窗體的TOP,LEFT,WIDTH,HEIGHT
    myfrm的窗體的四個值如些設置即可.然後發消息給myfrm,設置他是frm1的模態窗體.
      

  14.   

    沒空給你寫代碼.要用到一些API函數.
      

  15.   

    To qjwxsd(零),
    myfrm.Show 1 不用试就知道不行,我想让myfrm显示在frm1之前,那肯定得涉及到frm1啊
      

  16.   

    To vansoft(Vansoft Workroom) ,
    可以实现的吗?我很急啊,可以简单说说思路吗?
      

  17.   

    这个问题简单,你只需要将myform的父窗体设置为form1就行了
    有直接的API函数,自己找找.
      

  18.   

    转一下1楼兄弟的:
    用SetWindowPos
    myfrm激活的时候就设置frm1最前
    如果myfrm失去焦点就取消置顶代码这样:
    SetWindowPos Me.hWnd, hwnd1, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE刚才想得太复杂了,呵呵