關於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 的組合。

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

Window 的屬性

每個 Window 都有如下屬性

  • 類名
  • 窗口名
  • 窗口樣式
  • 擴展的窗口樣式
  • 位置
  • 尺寸
  • 父窗體或子窗體的句柄
  • 菜單的句柄或子窗體的標識
  • 實例的句柄
  • 創建信息
  • 窗口句柄

系統中有 5 種 Window。

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

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

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

窗口的創建過程

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

  • 註冊窗口,調用 RegisterClass 方法
  • 創建窗口,調用 CreateWindowEx 方法

創建完成後,創建好的窗口並不會自己顯示出來。因此還需要調用顯示的方法(ShowWindow)進行顯示。

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

窗口的銷燬過程

銷燬窗口時只需要調用 DestroyWindow 方法即可。

當一個窗口被銷燬後,窗口將消失,並回收與之相關的資源。

如果一個窗口有關閉按鈕。當點擊了之後,窗體可接收到一個名爲 WM_CLOSE 的 windows 消息。可以選擇在接收到此消息時加入確認關閉的操作。而後根據情況來決定是否調用 DestroyWindow 方法。

`參考內容:https://docs.microsoft.com/zh-cn/windows/win32/winmsg/windows

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章