(以下內容是從網上查詢的)
一、滑鼠穿透功能用到的函式。
1、getwindowlong
該函式獲得有關指定視窗的資訊,函式也獲得在額外視窗記憶體中指定偏移位位址的32位度整型值。
hwnd:視窗控制代碼及間接給出的視窗所屬的視窗類。
nlndex:指定要獲得值的大於等於0的值的偏移量。有效值的範圍從0到額外視窗記憶體空間的位元組數一4例如,若指定了12位或多於12位的額外類儲存空間,則應設為第三個32位整數的索引位8。要獲得任意其他值,指定下列值之一:
gwl_exstyle;獲得擴充套件視窗風格。
gwl_style:獲得視窗風格。
gwl_wndproc:獲得視窗過程的位址,或代表視窗過程的位址的控制代碼。必須使用callwindowproc函式呼叫視窗過程。
gwl_hinstance:獲得應用事例的控制代碼。
gwl_hwndpaaent:如果父視窗存在,獲得父視窗控制代碼。
gwl_id:獲得視窗標識。
gwl_userdata:獲得與視窗有關的32位值。每乙個視窗均有乙個由建立該視窗的應用程式使用的32位值。 在hwnd引數標識了乙個對話方塊時也可用下列值:
dwl_dlgproc:獲得對話方塊過程的位址,或乙個代表對話方塊過程的位址的控制代碼。必須使用函式callwindowproc來呼叫對話方塊過程。
dwl_msgresult:獲得在對話方塊過程中乙個訊息處理的返回值。
dwl_user:獲得應用程式私有的額外資訊,例如乙個控制代碼或指標。 返回值:如果函式成功,返回值是所需的32位值;如果函式失敗,返回值是0。若想獲得更多錯誤資訊請呼叫 getlasterror函式。
2、setlayeredwindowattributes
hwnd是透明窗體的控制代碼,
crkey為掩碼的顏色,可以用rgb(r,g,b)來指定。
balpha是不透明度,取值範圍是(0,255),其中0代表全透明,255代表不透明。
dwflags是透明方式,可以取兩個值: 當取值為lwa_alpha時,crkey引數無效,balpha引數有效; 當取值為lwa_colorkey時,窗體中的所有顏色為crkey的地方將變為透明,balpha引數無效。
lwa_alpha = 0x2
lwa_colorkey=0x1
也可以取兩個值的組合:lwa_alpha or lwa_colorkey。這樣crkey的地方將變為全透明,而其它地方根據balpha引數確定透明度。
3、setwindowlong
函式也將指定的乙個32位值設定在視窗的額外儲存空間的指定偏移位置。
hwnd:視窗控制代碼及間接給出的視窗所屬的類。
nlndex:指定將設定的大於等於0的偏移值。有效值的範圍從0到額外類的儲存空間的位元組數減4:例如若指定了12位或多於12位的額外類儲存空間,則應設為第三個32位整數的索引位8。要設定其他任何值,可以指定下面值之一:
gwl_exstyle:設定乙個新的擴充套件風格。
gwl_style:設定乙個新的視窗風格。
gwl_wndproc:為視窗過程設定乙個新的位址。
gwl_id:設定乙個新的視窗識別符號。
gwl_hinstance:設定乙個新的應用程式例項控制代碼。
gwl_userdata:設定與視窗有關的32位值。每個視窗均有乙個由建立該視窗的應用程式使用的32位值。 當hwnd引數標識了乙個對話方塊時,也可使用下列值:
dwl_dlgproc:設定對話方塊過程的新位址。
dwl_msgresult:設定在對話方塊過程中處理的訊息的返回值。
dwl_user:設定的應用程式私有的新的額外資訊,例如乙個控制代碼或指標。
dwnewlong:指定的替換值。
返回值:如果函式成功,返回值是指定的32位整數的原來的值。如果函式失敗,返回值為0。若想獲得更多錯誤資訊,請呼叫getlasterror函式。
二、**
private const uint ws_ex_layered = 0x80000; private const int ws_ex_transparent = 0x20; private const int gwl_style = (-16); private const int gwl_exstyle = (-20); private const int lwa_alpha = 0x2; [dllimport("user32", entrypoint = "setwindowlong")] private static extern uint setwindowlong( intptr hwnd, int nindex, uint dwnewlong ); [dllimport("user32", entrypoint = "getwindowlong")] private static extern uint getwindowlong( intptr hwnd, int nindex ); [dllimport("user32", entrypoint = "setlayeredwindowattributes")] //balpha是不透明度,取值範圍是(0,255),其中0代表全透明,255代表不透明。 private static extern int setlayeredwindowattributes( intptr hwnd, int crkey, int balpha, int dwflags ); /// /// 使視窗有滑鼠穿透功能 /// public void canpenetrate() public form1() private void form1_load(object sender, eventargs e)
實現「滑鼠穿透窗體」功能
1 delphi實現 varws dword begin ws getwindowlong form1.handle,gwl exstyle ws ws or ws ex transparent ws ws or 80000 setwindowlong form1.handle,gwl exstyl...
滑鼠穿透 flex實現
問 乙個面板上有許多的可是物件,有些物件的部分是透明的,當各種物件疊加時,需忽略透明的部分而直接選中下面的物件。如何使用flex的api來實現滑鼠穿透。答 使用hittestpoint x number,y number,shapeflag boolean boolean 計算顯示物件,以確定它是否...
c 實現Picturebox的滑鼠拖拽功能
要求及背景 工作需要,要在乙個form裡面實現乙個實時預覽的picturebox影象,由於picturebox可能會遮擋到其後面的畫面,所以要求picturebox可以由使用者自行拖拽,類似於懸浮框。原理說明 在網上兜了幾圈之後,決定用三段 實現。首先要註冊滑鼠的三個事件 移動 滑鼠左鍵按下 滑鼠左...