Win32 SDK基礎(六)之詳解視窗類別的查找過程與相關API
一、視窗類別的尋找過程
上一文中,我們介紹了windows系統三種視窗類別-系統視窗類別、全域視窗類別和局部視窗類別。每個視窗類別在作業系統中的作用域不同,而且每個作用域內註冊的視窗類別名稱是不能重複的。而建立視窗時往往會在系統、全域、局部範圍依照視窗類別名稱尋找,尋找過程總結如下:
(1)作業系統依照傳入的視窗類別名稱,現在局部視窗類別中進行查找,如果找到執行第2步,如果未找到執行第#3步驟。
(2)比較局部視窗類別和建立視窗時傳入的HINSTANCE變數。如果發現相等,表示建立和註冊的視窗在同一個模組,建立視窗返回。如果不相等,繼續執行第3步驟。
(3)在應用程式全域視窗類別中進行查找,如果找到,執行第4步,如果未找到執行第# 5步。
(4)使用找到的視窗類別的信息,建立視窗並返回。
(5)在系統視窗類別中查找,如果找到就建立窗口,找不到就是建立視窗失敗。
二、註冊視窗類別的API RegisterClass和RegisterClassEx
RegisterClass和RegisterClassEx 都能用於註冊視窗類,他們兩個的原型分別如下:
ATOM WINAPI RegisterClass( _In_ const WNDCLASS *lpWndClass ); ATOM WINAPI RegisterClassEx( _In_ const WNDCLASSEX *lpwcx );
從API原型上看可以看出,二者的差別主要在於接收的參數上,這個參數就是我們需要註冊的視窗類別。這兩個視窗類別宣告如下:
typedef struct tagWNDCLASS { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; } WNDCLASS, *PWNDCLASS;
typedef struct tagWNDCLASSEX { UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; HICON hIconSm; } WNDCLASSEX, *PWNDCLASSEX;
從上面的程式碼可以看到,兩個視窗類別結構體的主要差異在於WNDCLASSEX含有cbSize視窗的結構體大小和hIconSm視窗的小圖示句柄。其他參數的意義請自行參考MSDN。
三、取得已註冊的視窗資訊GetClassInfo
GetClassInfo() API可以取得已註冊的視窗的訊息,其函數原型如下:
BOOL WINAPI GetClassInfo( _In_opt_ HINSTANCE hInstance, _In_ LPCTSTR lpClassName, _Out_ LPWNDCLASS lpWndClass );
hInstance—— 是設定查找的作用域,如果設為NULL,會從系統、全域和局部三個作用域中找出。
lpClassName —— 是要找的視窗類別名稱。
lpWndClass —— 傳入的WndClass結構體變數的位址,用於接收視窗類別資訊。
我們來尋找上文所建立的Button類別的視窗資訊:
WNDCLASS wc; if (GetClassInfo(NULL, "Button", &wc) == false) MessageBox(NULL,"GetClassInfo Faile",NULL,NULL);
我們來透過設定斷點,查看獲取的Button視窗類別的資訊:
四、卸載視窗類別UnregisterClass
我們可以透過UnregisterClass可以將已經註冊的視窗類別進行卸載,其原型如下:
BOOL WINAPI UnregisterClass( _In_ LPCTSTR lpClassName, _In_opt_ HINSTANCE hInstance );
lpClassName - 是要卸載的視窗類別名稱。
hInstance —— 是設定查找的作用域,如果設為NULL,會從系統、全域和局部三個作用域找到。
以下程式碼,將註冊的Button視窗類別進行卸載:
if (UnregisterClass("Button",NULL) == false) MessageBox(NULL, "UnregisterClass Faile", NULL, NULL);
以上是Win32 SDK基礎(六)之詳解視窗類別的查找過程與相關API的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Windows 11 的原生應用程式(如檔案總管)和其他 shell 應用程式預設使用圓角和 Fluent Design 元素(如 Acrylic)。除了圓角,Windows 11 的另一個重要設計特點是雲母等材質,它將應用程式的背景顏色與桌面對齊。雲母與壓克力類似,但其工作方式略有不同。正如微軟所描述的,Windows Mica 材料透過將背景與應用程式對齊來創建「顏色層次結構

防毒軟體有時可能會在 Windows 32 筆記型電腦上顯示警告,指出 Trojan/win11.casdet rfn。它表示PC感染了特洛伊木馬惡意軟體,導致其故障。幸運的是,有一些可能的方法可以解決此問題,如下所述。此外,您可能對我們關於 cdn.districtm.io 是否為彈出視窗/病毒/惡意軟體的詳細指南感興趣。什麼是 Trojan/win32.casdet rfn? Trojan/win32.casdet rfn 是一種嚴重的木馬病毒感染,可以超越系統並殺死其進程,使其容易

win32和win64的差別是:1、win32是指Microsoft Windows作業系統的32位元環境,win64是指Microsoft Windows作業系統的64位元版本,比32位元版本更穩定快速;2、win32最高支援2G的內存, win64必須是4G以上記憶體;3、win64支援基於64位元的處理器,而win32卻無法完全支援;4、win32追求簡潔,win64追求效能。

早在2021年8月,微軟就承諾Windows10和Windows11上的OneNote將在未來幾個月內收到一系列主要功能更新,這是這家科技巨頭將多個版本的筆記應用程式統一為單一版本的努力的一部分客戶。 OneNote在過去幾年中發生了許多變化。 2018年,當微軟真正希望人們使用其UWP版本的OneNote時,該公司停止將原始且功能豐富的OneNote版本與預先安裝的Office應用程式捆綁在一起。相反,微軟只提供了UWP客戶端並為現代版本添加了新功能。微軟後來改

一位微軟官員證實了有關GoogleChrome、ChromiumEdge、Discord和其他幾個應用程式被微軟內建防毒軟體「WindowsDefender」標記為「 Behavior:Win32/Hive.ZY」的廣泛報導。這家科技巨頭在聲明中證實,它正在研究一個修復程序,該修復程序將在接下來的幾個小時內向所有人推出。那麼「Behavior:Win32/Hive.ZY」到底是什麼?根據微軟安全入口網站上發布的文件,任何標記為「Behavior:Win32/Hive.ZY」的文件都是帶有

Microsoft正在將大量新功能放入MicrosoftStore。隨著公司繼續努力使應用程式商店更適合使用Windows的每個人,這些都將使最終用戶和開發人員受益。這些變更的最大亮點之一將是Windows11上MicrosoftStore中的新「復原應用程式」功能。它將連接到用戶的Microsoft帳戶,因此登入新的Windows11PC後,他們只需單擊幾下即可自動恢復應用程式。 「為了讓客戶更容易快速、無縫地過渡到他們的新PC,我們很快就會在WindowsInsider頻道

許多Windows11和10用戶看到WindowsDefender的警告通知表示偵測到威脅「行為:Win32/Hive.ZY」而感到困擾。據報道,當用戶嘗試開啟一些常用應用程式(如GoogleChrome或ChromiumEdge、Whatsapp、Discord和Spotify)時,會引發此WindowsDefender警告或警報。即使您在PC上阻止了此威脅,它也會在您下次打開此受影響的應用程式時彈出並顯示一條訊息MicrosoftDefenderAntivi

近日新消息,Canva推出了一系列AI圖像工具功能試圖與Adobe的Firefly抗衡,其旨在簡化工作場所的內容創建流程,讓非設計專業人士更容易、更有效率地創作內容,讓平面設計師能夠專注於關鍵任務,並挑戰Adobe在市場上的主導地位。根據介紹,Canva的VisualWorksuite已經整合了全新的BrandHub,旨在為使用者提供一套工具,幫助他們確保與其組織的視覺識別保持一致。使用者可以利用此工具創建包含公司文化資訊(例如LOGO、字體、顏色和統一設計風格)的BrandKit(品牌IP工具包)。
