解决方案 »

  1.   

    恭喜楼主.
    使用API时,不明白的多翻翻MSDN是好习惯.
      

  2.   


    版主,这个函数的MSDN没说清楚呀,这都是我自己试出来的
      

  3.   

    第1句放说不能为null把我雷到了, 我经常传null, 最后注意却间接说可以为null~
    怎么会认为msdn没说清楚呢? point it out.
      

  4.   


    谢谢大侠指定,你说的第一个NULL的问题,我对注释做了修改,麻烦你看看:
    hWndInsertAfter,[输入]:
    存放要将hWnd参数指定的窗口定位在哪个窗口句柄的前面。
    如果不想定位窗口,就将uFlags参数中设置SWP_NOZORDER标记,则本参数将被忽略,否则本参数不能为NULL。
    此参数也可以为(选一至一个):
    HWND_BOTTOM(1):
    如果hWnd参数指定的窗口是当前激活窗口,将此窗口定位在Z轴顺序的底部,也就是所有窗口的后面,且如果此窗口是置顶窗口,就变成非置顶窗口。
    如果hWnd参数指定的窗口不是当前激活窗口,则不做任何定位,无论此窗口是置顶窗口,还是非置顶窗口。
    HWND_NOTOPMOST(-2):
    如果hWnd参数指定的窗口是置顶窗口,且是当前激活窗口,就变成非置顶窗口,并定位在所有非置顶窗口的前面,及在所有置顶窗口的后面。
    如果hWnd参数指定的窗口已经是一个非置顶窗口,或不是当前激活窗口,则不做任何定位。
    HWND_TOP(0):
    如果hWnd参数指定的窗口是非置顶窗口,且是当前激活窗口,将窗口定位在所有非置顶窗口的前面,及在所有置顶窗口的后面。
    如果hWnd参数指定的窗口已经是一个置顶窗口,或不是当前激活窗口,则不做任何定位。
    HWND_TOPMOST(-1):
    将hWnd参数指定的窗口定位在所有非置顶窗口和置顶窗口的前面,并将窗口变成置顶窗口,无论此窗口是不是当前激活窗口。
    如果hWnd参数指定的窗口在置顶后,又有其他窗口被置顶,则此窗口将被定位在其他置顶窗口的后面。
    如果要一直保持某个窗口的置顶位置,需要每隔一段时间就设置一次置顶,才能保证不被其他窗口盖住。
      

  5.   


    这位大侠说的第二个问题,我说MSDN上没有说清楚,我本来觉得没有必要指出来的,现在我还是说说吧,看看我说的对不?MSDN上说HWND_BOTTOM标记是表示“Places the window at the bottom of the Z order. If the hWnd parameter identifies a topmost window, the window loses its topmost status and is placed at the bottom of all other windows.”,我的理解是“将hWnd参数指定的窗口定位到所有窗口的后面,如果此窗口是一个置顶窗口,则变成非置顶窗口,并定位到所有窗口的后面”,但是经过我的测试,发现“如果hWnd参数指定的窗口不是当前激活窗口,则不做任何定位,无论此窗口是置顶窗口,还是非置顶窗口。且只有当hWnd参数指定的窗口是当前激活窗口时,才会按照MSDN上说的做”。
      

  6.   

    除了第一个参数和最后一个参数,其余的都可以通过最后一个参数使其有效或无效。hWndInsertAfter 就是窗口的 Z 序,有什么可疑惑的。我觉得 MSDN 说的很清楚。
      

  7.   

    是啊,多翻翻MSDN中对函数的说明,仔细读,你会有意想不到的收获
      

  8.   

    msdn必须要仔细读, 特别是 Res 部分一定不要放过.
      

  9.   


    请问大侠,你是不是在uFlags参数中设置SWP_NOZORDER标记?
      

  10.   


    请问大侠,你是不是在uFlags参数中设置SWP_NOZORDER标记?是我说错了,没传过null
      

  11.   


    请问大侠,你是不是在uFlags参数中设置SWP_NOZORDER标记?是我说错了,没传过null哦,好的,没事,说清楚就好了