API對表單處理補充

來源:互聯網
上載者:User

上次在談到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;

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.