• 窗体或控件置前


    SetWindowPos 详解

    函数名:

      SetWindowPos

    头文件:

      winuser.h

    函数原型:

      BOOL SetWindowPos
      (
      HWND hWnd, //窗口句柄
      HWND hWndInsertAfter, //排列顺序的句柄
      int X, //水平坐标
      int Y, //垂直坐标
      int cx, //宽
      int cy, //高
      UINT uFlags //窗口定位标识
      );

    说明:

      这个函数能改变窗口的大小、位置和设置子窗口、弹出窗口或顶层窗口的排列顺序。
      返回值:

      BOOL,如果返回值非零表示成功,返回零表示失败。错误信息请参看GetLastError函数。

    参数表:

      参数 类型及说明
      hwnd HWND,欲定位的窗口句柄
      hWndInsertAfter HWND,置于hwnd前面的窗口句柄。这个参数必须是窗口的句柄或是下面的值之一:    HWND_BOTTOM 将窗口置于其它所有窗口的底部
      HWND_NOTOPMOST 将窗口置于其它所有窗口的顶部,并位于任何最顶部窗口的后面。如果这个窗口非顶部窗口,这个标记对该窗口并不产生影响
      HWND_TOP 将窗口置于它所有窗口的顶部
      HWND_TOPMOST 将窗口置于其它所有窗口的顶部,并位于任何最顶部窗口的前面。即使这个窗口不是活动窗口,也维持最顶部状态

    x:int,指定窗口新的X坐标

    Y:int,指定窗口新的Y坐标

    cx:int,指定窗口新的宽度

    cy:int,指定窗口新的高度

    wFlags:

      UINT,指定窗口状态和位置的标记。这个参数使用下面值的组合: SWP_DRAWFRAME 围绕窗口画一个框
      SWP_FRAMECHANGED 发送一条WM_NCCALCSIZE消息进入窗口,即使窗口的大小没有发生改变。如果不指定这个参数,消息WM_NCCALCSIZE只有在窗口大小发生改变时才发送
      SWP_HIDEWINDOW 隐藏窗口
      SWP_NOACTIVATE 不激活窗口
      SWP_NOCOPYBITS 屏蔽客户区域
      SWP_NOMOVE 保持当前位置(X和Y参数将被忽略)
      SWP_NOOWNERZORDER 不改变所有窗口的位置和排列顺序
      SWP_NOREDRAW 窗口不自动重画
      SWP_NOREPOSITION 与SWP_NOOWNERZORDER标记相同
      SWP_NOSENDCHANGING 防止这个窗口接受WM_WINDOWPOSCHANGING消息
      SWP_NOSIZE 保持当前大小(cx和cy会被忽略)
      SWP_NOZORDER 保持窗口在列表的当前位置(hWndInsertAfter将被忽略)
      SWP_SHOWWINDOW 显示窗口

    备注:

      如果设置了SWP_SHOWWINDOW或SWP_HIDEWINDOW标记,这个窗口不发生移动或改变大小。窗口成为最顶级窗口后,它的所有子窗口也会进入最顶级。一旦将其设为非最顶级,则它的所有子窗口也会转为非最顶级。

    相关函数:

      MoveWindow,SetActiveWindow,SetForegroundWindow

    例子:

      //设置顶层窗口
      SetWindowPos( Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE||SWP_NOSIZE);

      //取消顶层窗口
      SetWindowPos( Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE||SWP_NOSIZE);

      C#调用,首先需要引用API函数

    [DllImport("user32")]
            
    public static extern long SetWindowPos(long hwnd, long hWndInsertAfter, long x, long y, long cx, long cy, long wFlags);
    代码
    Panel plCover = new Panel();
    plCover.Location 
    = new System.Drawing.Point(00);
    plCover.Dock 
    = DockStyle.Fill; this.Controls.Add(plCover);

    SetWindowPos((
    long)plCover.Handle, -100003);  //设置窗体置前 
    SetWindowPos((long)plCover.Handle, -200003);  //设置窗体正常 
    SetWindowPos((long)plCover.Handle, 100003);  //设置窗体置后 
  • 相关阅读:
    【SSH】——Hibernate三种状态之间的转化
    【工具学习】——教你读懂Maven的配置文件
    【SSH】——封装参数不确定的分页查询
    从零开始配置Jenkins(二)——常见问题及排错思路
    从零开始配置Jenkins(一)——基本配置
    Chrome插件集合
    Vue.js——vue-resource全攻略
    vue中用qs传参发送axios请求
    vue项目打包后首页一片空白解决办法和具体原因总结
    vue开发环境和生产环境里面解决跨域的几种方法
  • 原文地址:https://www.cnblogs.com/zhangpengshou/p/1767974.html
Copyright © 2020-2023  润新知