目次
1.1 メッセージキュー
1.2 メッセージ キューの種類
1.3 キューメッセージと非キューメッセージ
2. メッセージ ループと GetMessage/PeekMessage
2.1 メッセージ ループ
2.2 GetMessage と PeekMessage
" >2.3 GetMessage/PeekMessage获取消息的过程
endMessage和PostMessage" >三、SendMessage和PostMessage
ホームページ 運用・保守 窓の運用と保守 Win32 SDKの基礎 (11) メッセージキューとGetMessage/PeekMessage、SendMessage/Postmesageの詳細説明

Win32 SDKの基礎 (11) メッセージキューとGetMessage/PeekMessage、SendMessage/Postmesageの詳細説明

Jun 06, 2017 am 10:09 AM

1. メッセージキュー

1.1 メッセージキュー

メッセージキューは、メッセージをキューに格納するために使用されるキューであり、すべてのウィンドウプログラムはメッセージキューを持っています。待ち行列。

1.2 メッセージ キューの種類

システム メッセージ キュー: オペレーティング システムによって維持されるメッセージ キュー。マウスやキーボードのメッセージなど、システムによって生成されたメッセージが保存されます。

プログラム メッセージ キュー: 各アプリケーション (スレッド) に属し、アプリケーションによって維持されるメッセージ キュー。

マウス、キーボードなどのメッセージが生成されると、メッセージはまずシステム メッセージ キューに保存され、次にオペレーティング システムが保存されたメッセージに基づいて対応するウィンドウのメッセージ キューを見つけて、メッセージをウィンドウのメッセージキュー。

1.3 キューメッセージと非キューメッセージ

キューメッセージ: メッセージは送信後、まずキューに入れられ、次にメッセージ ループ を通じて取得されます。一般的なキュー メッセージ: キーボード、マウス、タイマーメッセージなど。

非キューメッセージ: メッセージ送信後、ウィンドウのメッセージ処理関数を直接見つけて、メッセージキューを経由せずにメッセージ処理関数を呼び出して処理します。一般的なキュー以外のメッセージ: WM_PAINT、WM_SIZE など。

2. メッセージ ループと GetMessage/PeekMessage

2.1 メッセージ ループ

一般的なメッセージ ループは次のとおりです:

void Message(HWND hWnd)  
{  
	MSG nMsg = { 0 };
	while (GetMessage(&nMsg, hWnd, 0, 0))  
	{  
		TranslateMessage(&nMsg);  
		DispatchMessage(&nMsg);  

		if(nMsg.message == WM_PAINT)
		{
			char buff[30]={};
			sprintf(buff,"处理消息%d\n",nMsg.message);
			WriteConsole(hOutput,buff,sizeof(buff),NULL,NULL);
		}
	}  
}
ログイン後にコピー

GetMessage/PeekMessage: プログラムのメッセージ キューからメッセージを取得します。

TranslateMessage: キーボードのキー押下などのメッセージを文字メッセージに翻訳します。

DispatchMessage: 翻訳されたメッセージをプログラムのメッセージ キューに再度入れます。

2.2 GetMessage と PeekMessage

GetMessage(
LPMSG lpMsg,
HWND hWnd,
UINT wMsgFilterMin,
UINT wMsgFilterMax
)
ログイン後にコピー

lpMsg: スレッドのメッセージ キューからメッセージ情報を受け取る MSG 構造体へのポインター。 hWnd: メッセージを取得するウィンドウのハンドル。値が NULL の場合、GetMessage は呼び出し側スレッドに属する任意のウィンドウのメッセージを取得し、スレッド メッセージは PostThreadMessage を通じて呼び出し側スレッドに送信されます。 wMsgFilterMin: 取得するメッセージの最小値を指定する
整数
wMsgFilterMax: 取得するメッセージの最大値を指定する整数。 戻り値: 関数が WM_QUIT 以外のメッセージを取得した場合、ゼロ以外の値を返します。関数が WM_QUIT メッセージを取得した場合、戻り値は 0 です。エラーが発生した場合、戻り値は -1 です。たとえば、hWnd が無効なウィンドウ ハンドルであるか、lpMsg が無効なポインタである場合です。さらに詳しい
エラー情報
を取得したい場合は、GetLastError 関数を呼び出してください。

lpMsg: メッセージ情報を受信するための MSG 構造体ポインター。

hWnd: メッセージがチェックされるウィンドウ ハンドル。

wMsgFilterMin: メッセージ範囲内のチェックする最初のメッセージを指定します。
wMsgFilterMax: チェックするメッセージ範囲内の最後のメッセージを指定します。
wRemoveMsg: メッセージがどのように処理されるかを決定します。このパラメータは次の値のいずれかをとります:

値 意味 PM_NOREMOVE PeekMessage が処理された後、メッセージはキューから削除されません。

PM_REMOVE

PeekMessage が処理された後、メッセージはキューから削除されます。

PM_NOYIELD

このフラグにより​​、システムは呼び出し側プログラムがアイドルになるのを待っているスレッドを解放しなくなります。 PM_NOYIELD は、PM_NOREMOVE または PM_REMOVE に自由に組み合わせることができます。


GetMessage和PeekMessage的主要区别在于:GetMessage是阻塞函数,它会在消息循环中会一直阻塞直到消息队列中出现了消息可以被获取,而PeekMessage是非阻塞函数,不管有没有获取到消息队列中的消息,它都会返回。PeekMessage更多用来检测消息队里中是否有消息,它的最后一个参数可以用来指定获取到消息后要不要把消息从消息队列中移除,通常情况下通过PeekMessage检测到消息队列有消息之后,再调用GetMessage区获取。

2.3 GetMessage/PeekMessage获取消息的过程

1、先在程序的消息队列中查找消息,如果有队列消息,就取出消息。

2、如果程序的消息队列中没有消息,向系统的消息队列获取属于本程序的消息。如果系统的消息队列中有属于本程序的消息,系统的消息队列会将消息分发到本程序的消息队列中。

3、如果系统的消息队列也没有消息,检查窗口需要绘制的区域是否需要重绘,如果发现有需要重绘的区域,产生WM_PAINT消息。

4、如果没有重新绘制区域,检查是否具有到时的定时器,如果有产生WM_TIMER定时器消息。

5、如果没有到时的定时器,整理程序的资源、内存等等。

三、SendMessage和PostMessage

LRESULT SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM IParam
)
ログイン後にコピー

hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。
Msg:指定被发送的消息。
wParam:指定附加的消息特定信息。
IParam:指定附加的消息特定信息。

返回值:返回值指定消息处理的结果,依赖于所发送的消息。

BOOL WINAPI PostMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
ログイン後にコピー

hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含义的两个值:
HWND_BROADCAST:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、 被覆盖的窗口和弹出式窗口。消息不被寄送到子窗口
NULL:此函数的操作和调用参数dwThread设置为当前线程的标识符PostThreadMessage函数一样
Msg:指定被寄送的消息。
wParam:指定附加的消息特定的信息。
LParam:指定附加的消息特定的信息。
返回值:如果函数调用成功,返回非零,否则函数调用返回值为零

1、SendMessage

       发送消息到指定的窗口,并等候对方将消息处理,为阻塞函数,获取消息的执行结果后返回。主要需要发送非队列消息,发送的消息不经过消息队列。

2、PostMessage

        发送消息到程序的消息队列,不管消息有没有被处理都会立即返回,用于队列消息的发送

以上がWin32 SDKの基礎 (11) メッセージキューとGetMessage/PeekMessage、SendMessage/Postmesageの詳細説明の詳細内容です。詳細については、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 マテリアルは「背景をアプリに合わせて色の階層を作成します」

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 クライアントを提供し、最新バージョンに新機能を追加しただけです。マイクロソフトはその後変更しました

Microsoft、Windows DefenderのBehavior:Win32/Hive.ZYエラーの修正をリリース Microsoft、Windows DefenderのBehavior:Win32/Hive.ZYエラーの修正をリリース Apr 28, 2023 pm 04:01 PM

Microsoftの関係者は、Google Chrome、ChromiumEdge、Discord、およびその他のいくつかのアプリケーションが、Microsoftの組み込みウイルス対策ソフトウェア「WindowsDefender」によって「Behavior:Win32/Hive.ZY」としてフラグ付けされたという広範な報告を確認しました。テクノロジー大手は声明の中で、今後数時間以内に全員に公開される予定の修正に取り組んでいることを認めた。では、「Behavior:Win32/Hive.ZY」とは一体何でしょうか? Microsoft のセキュリティ ポータルに掲載された文書によると、「Behavior:Win32/Hive.ZY」とマークされたファイルはすべて

Windows 11 の Microsoft Store の新機能は何ですか? Windows 11 の Microsoft Store の新機能は何ですか? Apr 28, 2023 pm 06:13 PM

Microsoft は、Microsoft Store に多くの新機能を追加しています。同社は Windows を使用するすべての人にとってストアをより良いものにする努力を続けるため、これらはエンド ユーザーと開発者の両方に利益をもたらします。これらの変更の最大のハイライトの 1 つは、Windows 11 の Microsoft Store の新しい「アプリの復元」機能です。ユーザーの Microsoft アカウントに接続されるため、新しい Windows 11 PC にログインした後、数回クリックするだけでアプリケーションを自動的に復元できます。 「お客様が新しい PC に迅速かつシームレスに移行しやすくするために、間もなく導入する予定です。

Windows Defender の動作を修正する方法: Win32/Hive.ZY アラート Windows Defender の動作を修正する方法: Win32/Hive.ZY アラート May 06, 2023 am 08:04 AM

多くの Windows 11 および 10 ユーザーは、「動作: Win32/Hive.ZY」という脅威が検出されたことを示す Windows Defender からの警告通知を見て悩んでいます。レポートによると、この Windows Defender の警告またはアラートは、ユーザーが Google Chrome や Chromium Edge、Whatsapp、Discord、Spotify などの一般的に使用されるアプリケーションを開こうとするとトリガーされます。 PC でこの脅威をブロックした場合でも、次にこの影響を受けるアプリケーションを開くと、MicrosoftDefenderAntivi というメッセージがポップアップ表示されます。

Win32 グラフィック デザイン ソフトウェア Canva が、巨大 Adob​​e に対抗する無料 AI ツールをリリース Win32 グラフィック デザイン ソフトウェア Canva が、巨大 Adob​​e に対抗する無料 AI ツールをリリース Mar 05, 2024 pm 04:34 PM

最近のニュースによると、Canva は Adob​​e の Firefly に対抗するために一連の AI 画像ツール機能を開始し、職場でのコンテンツ作成プロセスを簡素化し、デザインの専門家以外の人でもコンテンツをより簡単かつ効率的に作成できるようにすることを目的としています。 、グラフィックデザイナーがミッションクリティカルなタスクに集中し、市場におけるアドビの優位性に挑戦できるようにします。レポートによると、Canva の Visual Worksuite には新しい BrandHub が統合されており、組織のビジュアル アイデンティティとの一貫性を確保するのに役立つ一連のツールをユーザーに提供することを目的としています。ユーザーはこのツールを使用して、企業文化情報 (ロゴ、フォント、色、統一されたデザイン スタイルなど) を含む BrandKit (ブランド IP ツールキット) を作成できます。

See all articles