程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 界面開發(二)--- NativeWindow

界面開發(二)--- NativeWindow

編輯:關於.NET

NativeWindow是.net Framework提供的一個底層的類。微軟官方的解釋為:NativeWindow Provides a low-level encapsulation of a window handle and a window procedure.說道這 些也相當於沒有說,因為NativeWindow到底是干什麼的也沒有說清楚,意思就是一個低級別的 對窗體句柄和窗體過程的一個封裝。後來查詢了很多的資料才明白了其中的意義。

資料來源:

http://www.diybl.com/course/4_webprogram/asp.net/netjs/2007921/72804.html

這個講解的是《利用NativeWindow監視WndProc消息》,這篇內容比較長,而且頁數比較多 ,經過自己努力和耐心,終於完成了其中的例子,代碼下載地址為: http://files.cnblogs.com/zhjp11/皮膚/NativeWindowApplication.rar

http://www.codeproject.com/KB/dialog/OpenFileDialogEx.aspx

這篇來自CodeProject,老外寫的代碼就是比較有水平。將Windows 的OpenFileDialog子類 化,顯示成了自定義的OpenFileDialog,而且添加了很多的事件。相當的佩服。

經過這兩篇的細心閱讀,終於了解了NativeWindow的作用,NativeWindow就是提供了底層的 封裝,提供了AssignHandle和RealeseHandle這兩個方法,主要就是對注冊了窗體句柄的窗體進 行Hook,將窗體的事件經過自己處理後交給Windows處理。使用Refector.net查看了 NativeWindow中AssignHandle這個方法,也驗證了我這個說法。在AssignHandle中有這樣一段 代碼:

userDefWindowProc = UnsafeNativeMethods.GetProcAddress(new HandleRef (null,UnsafeNativeMethods.GetModuleHandle("user32.dll")), lpProcName); 

對Win32開發的也許都知道這段代碼的意義,他也是Hook的一種。不過是更加高級的Hook方 式。這裡就不在細說,我們現在只要知道他可以對我們進行注冊的窗體進行Hook,可以將自己 的代碼加載到我們想要的位置就可以了。

然後我就使用NativeWindow獲取所有的窗體的所有事件,然後輸出Hook到的時間,結果圖如 下:

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved