前回の記事では、windowsシステムの3つのウィンドウクラス、システムウィンドウクラス、グローバルウィンドウクラス、ローカルウィンドウクラスを紹介しました。各ウィンドウクラスはオペレーティングシステム内で異なるスコープを持ち、各スコープに登録されたウィンドウクラス名を重複して使用することはできません。ウィンドウを作成するとき、多くの場合、システム、グローバル、およびローカル スコープ内のウィンドウ クラス名に従って検索されます。検索プロセスは次のように要約されます:
(1) オペレーティング システムはローカル ウィンドウ クラスを検索するようになりました。受信ウィンドウのクラス名に基づいて、見つかった場合はステップ 2 を実行し、見つからなかった場合はステップ 3 を実行します。
(2)ローカルウィンドウクラスと、ウィンドウの作成時に渡されたHINSTANCE変数を比較します。等しい場合は、作成したウィンドウと登録したウィンドウが同じモジュール内にあることを意味し、作成したウィンドウを返します。等しくない場合は、3のステップに進みます。
(3)アプリケーションのグローバルウィンドウクラスを検索し、見つかった場合はステップを実行します。見つからない場合はステップ5を実行します。
(4) 見つかったウィンドウクラス情報を使用してウィンドウを作成し、戻ります。
(5) システムウィンドウクラスを検索し、見つからない場合はウィンドウの作成に失敗します。
のプロトタイプは次のとおりです。からのAPI プロトタイプ。この 2 つの違いは主に受信するパラメーターにあります。このパラメーターは登録する必要があるウィンドウ クラスです。 2 つのウィンドウ クラスは次のように宣言されます: ATOM WINAPI RegisterClass(
_In_ const WNDCLASS *lpWndClass
);
ATOM WINAPI RegisterClassEx(
_In_ const WNDCLASSEX *lpwcx
);
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;
structurals の主な違いは、WNDCLASSEX に cbSize ウィンドウの構造体サイズと小さなアイコンが含まれていることです。 hIconSm ウィンドウのハンドル。他のパラメータの意味については、MSDNを参照してください。 3.
のプロトタイプは以下の通りです: 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;
hInstance——設定検索 のスコープを
NULL に設定すると、システム、グローバル、ローカルの 3 つのスコープから検索されます。 lpClassName - 検索するウィンドウ クラス名です。 lpWndClass - 渡された
WndClass 構造体変数のアドレス。ウィンドウ クラス情報を受け取るために使用されます。上記で作成した Button
クラスのウィンドウ情報を見つけてみましょう:BOOL WINAPI GetClassInfo(
_In_opt_ HINSTANCE hInstance,
_In_ LPCTSTR lpClassName,
_Out_ LPWNDCLASS lpWndClass
);
ブレークポイントを設定して、取得した Button
Window クラスをアンインストールします クラスの登録を解除する
WNDCLASS wc; if (GetClassInfo(NULL, "Button", &wc) == false) MessageBox(NULL,"GetClassInfo Faile",NULL,NULL);lpClassName - アンインストールするウィンドウ クラスの名前です。
—— 検索範囲を設定します。 NULL
に設定すると、システム、グローバル、ローカルの 3 つのスコープから検索します。
次のコードは、登録された Button ウィンドウ クラスをアンインストールします:
BOOL WINAPI UnregisterClass( _In_ LPCTSTR lpClassName, _In_opt_ HINSTANCE hInstance );
以上がWin32 SDKの基礎⑥ ウィンドウクラスの検索処理と関連APIの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。