Table des matières
1.1 File d'attente des messages
1.2 Types de files d'attente de messages
1.3 Messages en file d'attente et messages hors file d'attente
2. Boucle de message et GetMessage/PeekMessage
2.1 Boucle de message
2.2 GetMessage et PeekMessage
" >2.3 GetMessage/PeekMessage获取消息的过程
endMessage和PostMessage" >三、SendMessage和PostMessage
Maison Opération et maintenance exploitation et entretien des fenêtres Bases du SDK Win32 (11) Explication détaillée de la file d'attente de messages et GetMessage/PeekMessage, SendMessage/Postmesage

Bases du SDK Win32 (11) Explication détaillée de la file d'attente de messages et GetMessage/PeekMessage, SendMessage/Postmesage

Jun 06, 2017 am 10:09 AM

1. MessageFile d'attente

1.1 File d'attente des messages

La file d'attente des messages est une file d'attente utilisée pour stocker les messages dans la file d'attente. Windows Tous les programmes ont une file d'attente de messages et le programme peut obtenir des messages de la file d'attente.

1.2 Types de files d'attente de messages

File d'attente de messages système : une file d'attente de messages maintenue par le système d'exploitation, qui stocke les messages générés par le système, tels que les messages de la souris et du clavier, etc.

File d'attente des messages du programme : une file d'attente de messages appartenant à chaque application (thread), maintenue par l'application.

Lorsqu'un message de souris, de clavier, etc. est généré, le message est d'abord stocké dans la file d'attente des messages système, puis le système d'exploitation trouve la file d'attente de messages de la fenêtre correspondante en fonction du message stocké et le délivre le message dans la file d'attente des messages de la fenêtre.

1.3 Messages en file d'attente et messages hors file d'attente

Messages en file d'attente : une fois le message envoyé, il est d'abord mis dans la file d'attente puis obtenu via la boucle de messages . Messages courants de la file d'attente : messages du clavier, de la souris, du minuteur , etc.

Message hors file d'attente : Une fois le message envoyé, recherchez directement la fonction de traitement des messages de la fenêtre et appelez la fonction de traitement des messages pour le traitement sans passer par la file d'attente des messages. Messages courants hors file d'attente : WM_PAINT, WM_SIZE, etc.

2. Boucle de message et GetMessage/PeekMessage

2.1 Boucle de message

La boucle de message générale est la suivante :

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);
		}
	}  
}
Copier après la connexion

GetMessage/PeekMessage : Depuis le programme Récupérez les messages de la file d'attente des messages.

TranslateMessage : traduisez des messages tels que les frappes sur le clavier en messages de caractères.

DispatchMessage : placez à nouveau le message traduit dans la file d'attente des messages du programme.

2.2 GetMessage et PeekMessage

GetMessage(
LPMSG lpMsg,
HWND hWnd,
UINT wMsgFilterMin,
UINT wMsgFilterMax
)
Copier après la connexion

lpMsg : pointeur vers la structure MSG, qui reçoit les informations de message de la file d'attente des messages du fil. hWnd : Le handle de la fenêtre dont le message est obtenu. Lorsque sa valeur est NULL, GetMessage récupère les messages de toute fenêtre appartenant au thread appelant et le message du thread est envoyé au thread appelant via PostThreadMessage.
wMsgFilterMin : Un
entier qui spécifie la valeur minimale du message à récupérer. wMsgFilterMax : Un entier spécifiant la valeur maximale du message à récupérer.
Valeur de retour : Si la fonction obtient d'autres messages autres que WM_QUIT, elle renvoie une valeur non nulle. Si la fonction reçoit un message WM_QUIT, la valeur de retour est zéro. Si une erreur se produit, la valeur de retour est -1. Par exemple, lorsque hWnd est un handle de fenêtre non valide ou que lpMsg est un pointeur non valide. Si vous souhaitez obtenir plus d'
informations sur les erreurs, veuillez appeler la fonction GetLastError.

BOOL PeekMessage(
LPMSG IpMsg,
HWND hWnd,
UINT wMSGfilterMin,
UINT wMsgFilterMax,
UINT wRemoveMsg
);
Copier après la connexion
lpMsg : pointeur de structure MSG pour recevoir les informations du message.

hWnd : Le handle de fenêtre dont le message est vérifié.
wMsgFilterMin : Spécifie le premier message de la plage de messages à vérifier.
wMsgFilterMax : Spécifie le dernier message de la plage de messages à vérifier.
wRemoveMsg : déterminez comment le message est traité. Ce paramètre peut prendre l'une des valeurs suivantes :

Valeur

Signification

PM_NOREMOVE

Une fois PeekMessage traité, le message n'est pas supprimé de la file d'attente.

PM_REMOVE

Une fois le PeekMessage traité, le message est supprimé de la file d'attente.

PM_NOYIELD

Cet indicateur empêche le système de libérer les threads en attendant que le programme appelant devienne inactif. PM_NOYIELD peut être librement combiné en PM_NOREMOVE ou 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
)
Copier après la connexion

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

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

BOOL WINAPI PostMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
Copier après la connexion

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

1、SendMessage

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

2、PostMessage

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Windows 11 22H2 apporte un design mica/acrylique à davantage d'applications de bureau Win32 Windows 11 22H2 apporte un design mica/acrylique à davantage d'applications de bureau Win32 Apr 14, 2023 pm 04:58 PM

Les applications natives de Windows 11 (comme l'Explorateur de fichiers) et d'autres applications shell utilisent par défaut des coins arrondis et des éléments Fluent Design (comme Acrylique). En plus des coins arrondis, une autre caractéristique de conception importante de Windows 11 concerne les matériaux comme le mica, qui aligne la couleur d'arrière-plan des applications avec celle du bureau. Le mica est similaire à l'acrylique mais fonctionne légèrement différemment. Comme Microsoft le décrit, Windows Mica Materials crée « une hiérarchie de couleurs en alignant les arrière-plans avec les applications ».

Cheval de Troie/win32.casdet Rfn dans Windows 11 Cheval de Troie/win32.casdet Rfn dans Windows 11 Apr 14, 2023 pm 02:49 PM

Le logiciel antivirus peut parfois afficher un avertissement indiquant Trojan/win11.casdet rfn sur les ordinateurs portables Windows 32. Cela indique que le PC est infecté par un cheval de Troie malveillant, provoquant un dysfonctionnement. Heureusement, il existe plusieurs moyens de résoudre ce problème, comme expliqué ci-dessous. De plus, vous pourriez être intéressé par notre guide détaillé pour savoir si cdn.districtm.io est un pop-up/virus/malware ou non. Qu’est-ce que le Trojan/win32.casdet rfn ? Trojan/win32.casdet rfn est une infection grave par un virus cheval de Troie qui peut envahir le système et tuer ses processus, ce qui facilite

Quelle est la différence entre win32 et win64 Quelle est la différence entre win32 et win64 May 29, 2023 pm 05:22 PM

La différence entre win32 et win64 est la suivante : 1. win32 fait référence à l'environnement 32 bits du système d'exploitation Microsoft Windows et win64 fait référence à la version 64 bits du système d'exploitation Microsoft Windows, qui est plus stable et plus rapide que le 32. -version bits ; 2. win32 prend en charge jusqu'à 2 Go de mémoire. Win64 doit avoir plus de 4 Go de mémoire ; 3. win64 prend en charge les processeurs 64 bits, mais win32 ne peut pas le prendre entièrement en charge ; 4. win32 recherche la simplicité, tandis que win64 recherche la performance.

Microsoft commence à tester la nouvelle conception OneNote pour Windows 11 Microsoft commence à tester la nouvelle conception OneNote pour Windows 11 Apr 19, 2023 pm 08:01 PM

En août 2021, Microsoft avait promis que OneNote sur Windows 10 et Windows 11 recevrait une série de mises à jour majeures de fonctionnalités dans les mois à venir, alors que le géant de la technologie unifie plusieurs versions de l'application de prise de notes en une seule partie de ses efforts. de clients. OneNote a subi de nombreux changements au cours des dernières années. En 2018, lorsque Microsoft souhaitait vraiment que les gens utilisent sa version UWP de OneNote, la société a cessé de regrouper la version originale et riche en fonctionnalités de OneNote avec les applications Office préinstallées. Au lieu de cela, Microsoft a uniquement fourni un client UWP et ajouté de nouvelles fonctionnalités pour les versions modernes. Microsoft a changé plus tard

Microsoft publie un correctif pour l'erreur Behavior:Win32/Hive.ZY dans Windows Defender Microsoft publie un correctif pour l'erreur Behavior:Win32/Hive.ZY dans Windows Defender Apr 28, 2023 pm 04:01 PM

Un responsable de Microsoft a confirmé de nombreuses informations selon lesquelles Google Chrome, ChromiumEdge, Discord et plusieurs autres applications étaient signalées comme « Behavior:Win32/Hive.ZY » par le logiciel antivirus intégré de Microsoft « WindowsDefender ». Le géant de la technologie a confirmé dans un communiqué qu'il travaillait sur un correctif qui sera déployé pour tout le monde dans les prochaines heures. Alors, qu’est-ce que « Behavior:Win32/Hive.ZY » exactement ? Selon un document publié sur le portail de sécurité de Microsoft, tout fichier marqué « Behavior:Win32/Hive.ZY » est

Quoi de neuf dans le Microsoft Store sur Windows 11 ? Quoi de neuf dans le Microsoft Store sur Windows 11 ? Apr 28, 2023 pm 06:13 PM

Microsoft intègre de nombreuses nouvelles fonctionnalités au Microsoft Store. Celles-ci profiteront à la fois aux utilisateurs finaux et aux développeurs, alors que la société poursuit ses efforts pour améliorer le Store pour tous ceux qui utilisent Windows. L'un des points forts de ces changements sera la nouvelle fonctionnalité « Restaurer les applications » dans le Microsoft Store sur Windows 11. Il sera connecté au compte Microsoft de l'utilisateur, donc après s'être connecté à un nouveau PC Windows 11, celui-ci pourra restaurer automatiquement l'application en quelques clics. "Pour permettre aux clients de passer plus facilement et rapidement à leurs nouveaux PC, nous allons bientôt introduire

Comment corriger le comportement de Windows Defender : alerte Win32/Hive.ZY Comment corriger le comportement de Windows Defender : alerte Win32/Hive.ZY May 06, 2023 am 08:04 AM

De nombreux utilisateurs de Windows 11 et 10 sont troublés par les notifications d'avertissement de Windows Defender indiquant que la menace « Comportement : Win32/Hive.ZY » a été détectée. Selon les rapports, cet avertissement ou alerte Windows Defender est déclenché lorsque les utilisateurs tentent d'ouvrir certaines applications couramment utilisées telles que Google Chrome ou Chromium Edge, Whatsapp, Discord et Spotify. Même si vous avez bloqué cette menace sur votre PC, elle apparaîtra avec un message MicrosoftDefenderAntivi la prochaine fois que vous ouvrirez cette application concernée.

Le logiciel de conception graphique Win32 Canva lance un outil d'IA gratuit pour défier le géant Adobe Le logiciel de conception graphique Win32 Canva lance un outil d'IA gratuit pour défier le géant Adobe Mar 05, 2024 pm 04:34 PM

Selon des informations récentes, Canva a lancé une série de fonctions d'outils d'image IA dans le but de concurrencer Firefly d'Adobe. Son objectif est de simplifier le processus de création de contenu sur le lieu de travail, en permettant aux professionnels non-concepteurs de créer du contenu plus facilement et plus efficacement. , et permettant aux graphistes de se concentrer sur les tâches critiques et de contester la domination d'Adobe sur le marché. Selon les rapports, Visual Worksuite de Canva a intégré le nouveau BrandHub, qui vise à fournir aux utilisateurs un ensemble d'outils pour les aider à assurer la cohérence avec l'identité visuelle de leur organisation. Les utilisateurs peuvent utiliser cet outil pour créer un BrandKit (boîte à outils IP de marque) contenant des informations culturelles de l'entreprise (telles que le LOGO, les polices, les couleurs et le style de conception unifié).

See all articles