zoukankan      html  css  js  c++  java
  • API对窗体处理补充

    上次在谈到API处理窗体的一些方法时,有个问题没有解决,就是想在找到目标窗体的前提下,让目标窗体和其它窗体同时出现在桌面上,同时要保证只有目标窗体是处于激活状态,也就是说只有目标窗体可以接受到模拟按键消息。终于找到了,可以通过SetForwardWindow(int handle)方法将目标窗体激活并处于最前窗体。同时利用另外一个API函数SetWindowPos来设置其他窗体,使其可以同处桌面。下面就简单介绍下这个方法:

    static extern 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标记,这个窗口不发生移动或改变大小。窗口成为最顶级窗口后,它的所有子窗口也会进入最顶级。一旦将其设为非最顶级,则它的所有子窗口也会转为非最顶级。

    程序中引用如下:

    [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
    static extern bool SetWindowPos(
    IntPtr hWnd,
    IntPtr hWndInsertAfter,
    int X,
    int Y,
    int cx,
    int cy,
    uint uFlags
    );
    static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
    static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);
    static readonly IntPtr HWND_TOP = new IntPtr(0);
    const UInt32 SWP_NOSIZE = 0x0001;
    const UInt32 SWP_NOMOVE = 0x0002;
    const UInt32 SWP_NOZORDER = 0x0004;
    const UInt32 SWP_NOREDRAW = 0x0008;
    const UInt32 SWP_NOACTIVATE = 0x0010;
    const UInt32 SWP_FRAMECHANGED = 0x0020;
    const UInt32 SWP_SHOWWINDOW = 0x0040;
    const UInt32 SWP_HIDEWINDOW = 0x0080;
    const UInt32 SWP_NOCOPYBITS = 0x0100;
    const UInt32 SWP_NOOWNERZORDER = 0x0200;
    const UInt32 SWP_NOSENDCHANGING = 0x0400;
    const UInt32 TOPMOST_FLAGS = SWP_NOMOVE | SWP_NOSIZE;
     
  • 相关阅读:
    CF D. Ehab and the Expected XOR Problem 贪心+位运算
    luogu 1903 [国家集训队]数颜色 / 维护队列 带修改莫队
    Test 1 T2 B 线段树合并
    CF812C Sagheer and Nubian Market 二分+贪心
    CF804B Minimum number of steps
    CF796D Police Stations BFS+染色
    CF796C Bank Hacking 细节
    k8s节点NotReady问题处理
    Elastic-Job快速入门
    Elastic-Job介绍
  • 原文地址:https://www.cnblogs.com/zcftech/p/2963960.html
Copyright © 2011-2022 走看看