天天看點

關于Windows的window

關于 Windows 的 Window

文章來自公衆号【狗子的圈】

當你成功進入 Windows 桌面,你所能看到的一切都可以被稱之為 Window。許許多多的 Window 組合在了一起,于是便有了 Windows。

桌面是 Window

當你進入了 Window 系統後,就可以看到桌面 Window 啦。桌面 Window 是系統定義的 Window,這個 Window 可以容納其他應用程式建立的 Window。

桌面 Window 的背景圖是格式為 bmp 的檔案。應該保證此 bmp 檔案存放在一個安全的位置,如果被删除,那麼桌面 Window 的背景将會一片漆黑。這是因為 Windows 系統将記錄此 bmp 檔案的位置于系統資料庫中,每次渲染桌面 Window 的背景時(例如重新開機),都要從此系統資料庫項中讀取 bmp 檔案的位置。如果找不到,自然桌面 Window 就是一片漆黑了。

可以通過 ​

​GetDesktopWindow​

​ 的 win32 方法取得桌面 Window 的句柄,以便執行需要的操作。

如果想要修改桌面背景,可以通過 ​

​SystemParametersInfo​

​ 的 win32 方法。

窗體是 Window

Windows 窗體結構如下圖所示:

關于Windows的window

用過 Windows 的都能看明白各個元件是幹什麼的,不解釋了。

另外,彈出的開始菜單也是 Window;就連 Windows 的工作列也是若幹 Window 的組合。

總之,你所看到的所有都是 window。

Window 的屬性

每個 Window 都有如下屬性

  • 類名
  • 視窗名
  • 視窗樣式
  • 擴充的視窗樣式
  • 位置
  • 尺寸
  • 父窗體或子窗體的句柄
  • 菜單的句柄或子窗體的辨別
  • 執行個體的句柄
  • 建立資訊
  • 視窗句柄

系統中有 5 種 Window。

  • 頂級 Window
  • 彈出式 window
  • 子 window
  • 分層的 Window
  • 僅處理消息的 window

系統可以直接給子 window 發送消息,但不能通過其父視窗發送。在 C# 中,如果要進行窗體間的操作,往往需要通過 P-Invoke 特性來實作。

僅處理消息的 Window 僅可以收發消息。它是不可見的,沒有 z 軸方向的層次,不能被枚舉出來,也不能接收廣播消息。

視窗的建立過程

每個基于視窗的應用都有一個入口點(入口函數)。入口函數做 2 件事

  • 注冊視窗,調用 RegisterClass 方法
  • 建立視窗,調用 CreateWindowEx 方法

建立完成後,建立好的視窗并不會自己顯示出來。是以還需要調用顯示的方法(ShowWindow)進行顯示。

如果你有 Winform 或 Win32 開發經驗,這個過程就不難了解。

視窗的銷毀過程

銷毀視窗時隻需要調用 DestroyWindow 方法即可。

當一個視窗被銷毀後,視窗将消失,并回收與之相關的資源。

繼續閱讀