目次
1. はじめに" >1. はじめに
2. ウィンドウの分類 " > 2. ウィンドウの分類
" >2.1 システムウィンドウクラス
" >2.2 グローバルウィンドウクラス
ホームページ 運用・保守 窓の運用と保守 Win32 SDK の基本 (5) ウィンドウ クラスの簡単な紹介

Win32 SDK の基本 (5) ウィンドウ クラスの簡単な紹介

Jun 06, 2017 am 09:42 AM

1. はじめに

前回の記事では、ウィンドウを一から作成しました。最も重要な手順の 1 つは、次のコードに示すように、ウィンドウ クラスを登録することです。

//注册窗口类
BOOL Register(LPSTR lpClassName, WNDPROC wndProc)
{
    WNDCLASSEX wce = { 0 };
    wce.cbSize = sizeof(wce);
    wce.cbClsExtra = 0;
    wce.cbWndExtra = 0;
    wce.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wce.hCursor = NULL;
    wce.hIcon = NULL;
    wce.hIconSm = NULL;
    wce.hInstance = g_hInstance;
    wce.lpfnWndProc = wndProc;
    wce.lpszClassName = lpClassName;
    wce.lpszMenuName = NULL;
    wce.style = CS_HREDRAW | CS_VREDRAW;
    ATOM nAtom = RegisterClassEx(&wce);
    if (nAtom == 0)
        return FALSE;
    return true;
}
ログイン後にコピー

Windows 上のウィンドウは、作成する前にシステムに明示的に登録する必要があります。ウィンドウの作成には CreateWindowEx を使用します。作成時の 2 番目のパラメーターの名前はウィンドウ クラス名であり、コードから見える範囲内で一意である必要があります。この記事では主に Windows におけるウィンドウ クラスの問題について説明します。

2. ウィンドウの分類

Windows で表示されるすべての要素は、その形状に関係なく、基本的には、円形、正方形、または不規則であるかどうかに関係なく、ウィンドウに属します。これらすべてのウィンドウは、特定のウィンドウ クラスに属します。一般に、Windows ウィンドウ クラスは 3 つのタイプに分類されます: (1) システム ウィンドウ クラス
(2) グローバル ウィンドウ クラス
(3) ローカル ウィンドウ クラス
以下に分類します。 Windows のウィンドウ クラスについては、別途説明します。

2.1 システムウィンドウクラス

Windows オペレーティングシステムで見られる ボタン 、編集ボックス、すべての コントロール は、実際にはウィンドウです。オペレーティング システムを インストールすると、Windows はオペレーティング システム内に多数のシステム レベルのウィンドウ クラスを登録します。開発時には、これらのウィンドウをウィンドウ クラス名に基づいて直接作成できます。この問題を説明するために、前の記事のコードに加えて次のコードを導入します。

HWND CreateMain(LPSTR lpClassName, LPSTR lpWndName)
{
	HWND hWnd = CreateWindowEx(0, lpClassName, lpWndName,
		WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, g_hInstance, NULL);
	return hWnd;
}
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
	_In_opt_ HINSTANCE hPrevInstance,
	_In_ LPWSTR    lpCmdLine,
	_In_ int       nCmdShow)
{
	// TODO: Place code here.

	g_hInstance = hInstance;
	
	HWND hWnd = CreateMain("Button", "window");
	Display(hWnd);
	Message();
	return 0;
}
ログイン後にコピー

CreateMain は、ウィンドウを作成するために定義した 関数 です。これは 2 つのパラメータを受け取ります。1 つ目は登録されたウィンドウ クラス名で、2 つ目はウィンドウのタイトルです。前回の記事のコードとは異なり、カスタム ウィンドウを登録する手順は省略しています。代わりに、WinMain 関数で CreateMain が呼び出され、ウィンドウ クラス名「Button」を持つウィンドウが作成されます。私たちが何をしようとしているかはすでにわかっていると思いますね?はい、Button ボタンを生成するためです。私たちがよく使うコントロールはすべてオペレーティング システムによってシステム ウィンドウ クラスとして登録されており、それらを直接使用できます。以下のプログラムの結果をご覧ください:


編集ボックスやドロップダウンボックスなど、他のシステムレベルのウィンドウを作成してみることもできます。

2.2 グローバルウィンドウクラス

グローバルウィンドウクラスとは、登録後にアプリケーションのグローバルスコープで使用できるウィンドウクラスを指します。たとえば、dll にグローバル ウィンドウ クラスを登録すると、dll を導入するすべてのプログラムでこのクラスを使用できるようになります。グローバルに使用されるウィンドウ クラスを登録する場合、次のように、登録時に wec の structural のスタイル メンバーに CS_GLOBALCLASSattribute を追加するだけで済みます。新しい DLL プロジェクトを追加し、次のようにウィンドウ登録関数 RegisterWindow() を定義します。

	wce.style = CS_HREDRAW | CS_VREDRAW | CS_GLOBALCLASS;
ログイン後にコピー

RegisterWindow() に登録されたウィンドウ クラスの名前は "DllMain"

で、
dll のメイン関数 登録関数によって登録が完了します:

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_DESTROY:
		PostQuitMessage(0);//可以使GetMessage返回0
		break;
	default:
		break;
	}
	return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

 BOOL RegisterWindow()
{
	WNDCLASSEX wce = { 0 };
	wce.cbSize = sizeof(wce);
	wce.cbClsExtra = 0;
	wce.cbWndExtra = 0;
	wce.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
	wce.hCursor = NULL;
	wce.hIcon = NULL;
	wce.hIconSm = NULL;
	wce.hInstance = NULL;
	wce.lpfnWndProc = WndProc;
	wce.lpszClassName = "DllMain";
	wce.lpszMenuName = NULL;
	wce.style = CS_HREDRAW | CS_VREDRAW | CS_GLOBALCLASS;
	ATOM nAtom = RegisterClassEx(&wce);
	if (nAtom == 0)
		return FALSE;
	return true;
}
ログイン後にコピー
このウィンドウ クラスを使用して、メイン プログラムにウィンドウを作成します:
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{
	....
	RegisterWindow();
	return TRUE;
}
}
ログイン後にコピー

プログラムを実行すると、次のことがわかります。このウィンドウも正常に生成されました:


2.3 ローカル ウィンドウ クラス

ローカル ウィンドウ クラスは定義の観点から定義されており、すべての cs_globalclasss は WCE のスタイルに追加されておらず、登録されたウィンドウ クラスはローカル ウィンドウ クラスです。ウィンドウクラス。

wce.style = CS_HREDRAW | CS_VREDRAW;//未添加CS_GLOBALCLASS
ログイン後にコピー

       我们在上一文中注册的窗口就是一个局部的窗口类,它的特点就是只能在注册的作用域内使用,由于它和全局窗口类只在注册的style和作用域上有分别,这里就不再详述,如要了解,请参照上一文。

以上がWin32 SDK の基本 (5) ウィンドウ クラスの簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windows 11 22H2 は、より多くの Win32 デスクトップ アプリにマイカ/アクリル デザインを導入します Windows 11 22H2 は、より多くの Win32 デスクトップ アプリにマイカ/アクリル デザインを導入します Apr 14, 2023 pm 04:58 PM

Windows 11 のネイティブ アプリ (ファイル エクスプローラーなど) とその他のシェル アプリは、デフォルトで丸い角と Fluent Design 要素 (アクリルなど) を使用します。丸い角に加えて、Windows 11 のもう 1 つの重要なデザイン機能は、アプリの背景色をデスクトップと揃える雲母などのマテリアルです。マイカはアクリルに似ていますが、動作が少し異なります。 Microsoft が説明しているように、Windows Mica マテリアルは「背景をアプリに合わせて色の階層を作成します」

MicrosoftはWindows 11向けの新しいぼかし効果を開発中 MicrosoftはWindows 11向けの新しいぼかし効果を開発中 May 13, 2023 am 09:04 AM

ビルド 22523 用の新しい Windows 11 SDK は、Microsoft が Windows 11 用の新しいぼかし効果を開発していることを明らかにしました。この効果はタブ付きと呼ばれ、アクリルとマイカに追加されます。 22523 SDK の新しい DWMWA_SYSTEMBACKDROP_TYPE、Mica、Acrylic のパブリック Win32 API、およびその奇妙な新しい「タブ」ミックス: pic.twitter.com/dbsu7ZFiIi — It's All Back (@StartIsBack) December 15, 2021 次の SDK のサンプル アプリケーションで利用可能

Windows 11 の Trojan/win32.casdet Rfn Windows 11 の Trojan/win32.casdet Rfn Apr 14, 2023 pm 02:49 PM

ウイルス対策ソフトウェアは、Windows 32 ラップトップ上で Trojan/win11.casdet rfn を示す警告を表示する場合があります。これは、PC がトロイの木馬マルウェアに感染し、誤動作を引き起こしていることを示します。幸いなことに、以下で説明するように、この問題を解決する方法がいくつかあります。さらに、cdn.districtm.io がポップアップ/ウイルス/マルウェアであるかどうかに関する詳細なガイドにも興味があるかもしれません。 Trojan/win32.casdet rfn とは何ですか? Trojan/win32.casdet rfn は、システムをオーバーランさせてプロセスを強制終了させる可能性がある深刻なトロイの木馬ウイルス感染症です。

win32とwin64の違いは何ですか win32とwin64の違いは何ですか May 29, 2023 pm 05:22 PM

win32 と win64 の違いは次のとおりです。 1. win32 は Microsoft Windows オペレーティング システムの 32 ビット環境を指し、win64 は Microsoft Windows オペレーティング システムの 64 ビット バージョンを指します。これは 32 ビット環境よりも安定しており、高速です。 -ビットバージョン; 2. win32 は最大 2G のメモリをサポートしますが、win64 には 4G 以上のメモリが必要です; 3. win64 は 64 ビット プロセッサをサポートしますが、win32 は完全にはサポートできません; 4. win32 はシンプルさを追求し、win64 はパフォーマンスを追求します。

Microsoft、Windows 11向けの新しいOneNoteデザインのテストを開始 Microsoft、Windows 11向けの新しいOneNoteデザインのテストを開始 Apr 19, 2023 pm 08:01 PM

2021 年 8 月に遡ると、Microsoft は、テクノロジー大手が複数のバージョンのメモ作成アプリを 1 つに統合するため、Windows 10 および Windows 11 の OneNote に今後数か月以内に一連の主要な機能アップデートが提供されると約束しました。顧客の。 OneNote は過去数年間に多くの変更を加えてきました。 2018 年、Microsoft は人々に自社の UWP バージョンの OneNote を使用してもらいたいと本気で考えていたため、機能が豊富なオリジナルの OneNote バージョンとプレインストールされた Office アプリのバンドルを中止しました。代わりに、Microsoft は UWP クライアントを提供し、最新バージョンに新機能を追加しただけです。マイクロソフトはその後変更しました

Java Hikvision SDKの二次開発に必須のスキルをマスターする Java Hikvision SDKの二次開発に必須のスキルをマスターする Sep 06, 2023 am 08:10 AM

Java Hikvision SDK の二次開発に必須のスキルをマスターする はじめに: 情報技術の急速な発展に伴い、ビデオ監視システムはさまざまな分野で広く使用されています。国内の大手ビデオ監視ソリューションプロバイダーとして、Hikvision の製品と技術は常に市場で重要な位置を占めてきました。さまざまなプロジェクトのニーズを満たすために、Hikvision は開発者が二次開発を実行するための SDK を提供します。この記事では、Java Hikvision SDK の二次開発を習得するための重要なスキルをいくつか紹介し、対応するコード例を添付します。 1. Hikvision を理解する

Windows App SDK 1.2 がオンラインになりました。新機能は次のとおりです。 Windows App SDK 1.2 がオンラインになりました。新機能は次のとおりです。 May 12, 2023 pm 06:07 PM

WindowsAppSDK は、開発者が Windows 10 (バージョン 1809 以降) および Windows 11 を使用するさまざまなデバイス間で「一貫した」機能を提供するために Windows アプリケーションで使用できるツールと API のセットです。 .NET や Windows SDK などの既存のアプリケーション タイプを置き換えるのではなく、既存のアプリケーションを補完するために使用できる統合 API ツールセットを提供するだけであることを理解することが非常に重要です。本日、Microsoft は多くの新機能を備えた Windows App SDK バージョン 1.2 をリリースしました。このリリースのハイライトはサードパーティの開発者かもしれません

SDKとは何ですか SDKとは何ですか Jan 06, 2023 pm 03:26 PM

sdkの正式名称は「Software Development Kit」、中国語で「ソフトウェア開発キット」を意味し、ハードウェアプラットフォームやオペレーティングシステム(OS)、プログラミング言語のメーカーが提供するツールのセットです。 SDK は、ソフトウェア開発者が特定のプラットフォーム、システム、またはプログラミング言語用のアプリケーションを作成するのを支援します。通常、基本的な SDK はコンパイラー、デバッガー、アプリケーション プログラミング インターフェイス (API) で構成されますが、ドキュメント、ライブラリ、ランタイム/開発環境、テスト/分析ツール、ネットワーク プロトコルなどの他のコンテンツが含まれる場合もあります。

See all articles