今天要寫乙個簡單的螢幕尺子,需要在最上層,結果發現topmost無論如何都不起作用了
查了下,各種辦法試盡,最後還是不好用
沒辦法,以前寫mfc的時候,要把視窗置為最頂層,是用setwindowpos系統api的,在c#中這招還靈麼
匯入函式後,一試,果然有效——有時候,治怪病還得靠api啊
1.先要匯入api
[dllimport("user32", entrypoint = "setwindowpos")]public static extern bool setwindowpos(intptr hwnd, intptr hwndlnsertafter, int x, int y, int cx, int cy, int flags);
2.在需要的地方呼叫
//第乙個引數表示要移動哪個窗體,傳入視窗控制代碼//第二個引數表示怎麼個移動法,-1就是移動到最頂層,具體值可以看msdn的api定義
//第三到六個引數不解釋
//最後乙個引數,可以設定移動時改變哪些值,0就是位置和大小都改變,具體請查詢msdn
setwindowpos(handle, new intptr(-1), left, top, width, height, 0);
順便記下使用api做的滑鼠穿透的效果,即視窗正常顯示,但是在視窗上點選時則視窗彷彿不存在一樣
[dllimport("user32.dll", entrypoint = "getwindowlong")]public static extern long getwindowlong(intptr hwnd, int nindex);
[dllimport("user32.dll", entrypoint = "setwindowlong")]
public static extern long setwindowlong(intptr hwnd, int nindex, long dwnewlong);
[dllimport("user32", entrypoint = "setlayeredwindowattributes")]
public static extern int setlayeredwindowattributes(intptr handle, int crkey, byte balpha, int dwflags);
const int gwl_exstyle = -20;
const int ws_ex_transparent = 0x20;
const int ws_ex_layered = 0x80000;
const int lwa_alpha = 2;
2.呼叫開啟滑鼠穿透(其實就是設定一下窗體屬性)
setwindowlong(handle, gwl_exstyle, getwindowlong(handle, gwl_exstyle) | ws_ex_transparent | ws_ex_layered);setlayeredwindowattributes(handle, 0, 128, lwa_alpha);
c 讀取excel中的資料(winform)
1 開啟選擇檔案對話方塊 1 string path 2 system.windows.forms.openfiledialog fd new openfiledialog 3 fd.title 選擇檔案 選擇框名稱 4 fd.filter xls files xls xls 選擇檔案的型別為xls...
C 中WinForm程式退出方法
1.this.close 只是關閉當前視窗,若不是主窗體的話,是無法退出程式的,另外若有託管執行緒 非主線程 也無法乾淨地退出 4.system.environment.exit 0 這是最徹底的退出方式,不管什麼執行緒都被強制退出,把程式結束的很乾淨。下面看一些例項 當我開啟乙個子窗體,進行某項操...
C 中WinForm窗體事件的執行次序
c 中winform窗體事件的執行次序如下 當 windows form 應用程式啟動時,會以下列順序引發主要表單的啟動事件 system.windows.forms.control.handlecreated system.windows.forms.control.bindingcontextc...