TN024 : messages et ressources définis par MFC

Remarque

La note technique suivante n'a pas été mise à jour depuis son inclusion initiale dans la documentation en ligne. Par conséquent, certaines procédures et rubriques peuvent être obsolètes ou incorrectes. Pour obtenir les informations les plus récentes, il est recommandé de rechercher l'objet qui vous intéresse dans l'index de la documentation en ligne.

Cette note décrit les messages Windows internes et les formats de ressources utilisés par MFC. Ces informations expliquent l’implémentation de l’infrastructure et vous aideront à déboguer votre application. Pour l’aventure, même si toutes ces informations ne sont officiellement pas prises en charge, vous pouvez utiliser certaines de ces informations pour des implémentations avancées.

Cette note contient les détails de l’implémentation privée MFC ; tous les contenus sont susceptibles de changer à l’avenir. Les messages Windows privés MFC ont une signification dans l’étendue d’une seule application, mais changeront à l’avenir pour contenir des messages à l’échelle du système.

La plage de messages Windows privés MFC et les types de ressources se trouvent dans la plage réservée « système » mise de côté par Microsoft Windows. Actuellement, tous les nombres des plages ne sont pas utilisés et, à l’avenir, de nouveaux nombres dans la plage peuvent être utilisés. Les nombres actuellement utilisés peuvent être modifiés.

Les messages Windows privés MFC se trouvent dans la plage 0x360-0x37F>.

Les types de ressources privées MFC se trouvent dans la plage 0xF0-0xFF>.

Messages Windows privés MFC

Ces messages Windows sont utilisés à la place de fonctions virtuelles C++ où un couplage relativement libre est requis entre les objets de fenêtre et où une fonction virtuelle C++ ne serait pas appropriée.

Ces messages Windows privés et structures de paramètres associées sont déclarés dans l’en-tête privé MFC ' AFXPRIV. H'. Soyez averti que l’un de vos codes qui inclut cet en-tête peut s’appuyer sur un comportement non documenté et risque de s’interrompre dans les futures versions de MFC.

Dans les rares cas où vous avez besoin de gérer l’un de ces messages, vous devez utiliser la macro de mappage de messages ON_MESSAGE et gérer le message au format LRESULT/WPARAM/LPARAM générique.

WM_QUERYAFXWNDPROC

Ce message est envoyé à une fenêtre en cours de création. Ceci est envoyé très tôt dans le processus de création en tant que méthode de détermination si le WndProc est AfxWndProc. AfxWndProc retourne 1.

Paramètres et valeur de retour Description
wParam Inutilisé
lParam Inutilisé
renvoie 1 si traité par AfxWndProc

WM_SIZEPARENT

Ce message est envoyé par une fenêtre frame à ses enfants immédiats pendant le redimensionnement (CFrameWnd::OnSize appels CFrameWnd::RecalcLayout qui appellent CWnd::RepositionBars) pour repositionner les barres de contrôle autour du côté du cadre. La structure AFX_SIZEPARENTPARAMS contient le rectangle client disponible actuel du parent et d’un HDWP (qui peut être NULL) avec lequel appeler DeferWindowPos pour réduire la réinitialisation.

Paramètres et valeur de retour Description
wParam Inutilisé
lParam Adresse d’une structure de AFX_SIZEPARENTPARAMS
renvoie Non utilisé (0)

Ignorer le message indique que la fenêtre ne prend pas part à la disposition.

WM_SETMESSAGESTRING

Ce message est envoyé à une fenêtre frame pour lui demander de mettre à jour la ligne de message dans la barre d’état. Un ID de chaîne ou un LPCSTR peut être spécifié (mais pas les deux).

Paramètres et valeur de retour Description
wParam ID de chaîne (ou zéro)
lParam LPCSTR pour la chaîne (ou NULL)
renvoie Non utilisé (0)

WM_IDLEUPDATECMDUI

Ce message est envoyé dans le temps d’inactivité pour implémenter la mise à jour de l’heure d’inactivité des gestionnaires d’interface utilisateur update-command. Si la fenêtre (généralement une barre de contrôle) gère le message, elle crée un CCmdUI objet (ou un objet d’une classe dérivée) et appelle CCmdUI::DoUpdate chacun des « éléments » dans la fenêtre. Cela case activée pour un gestionnaire de ON_UPDATE_COMMAND_UI pour les objets de la chaîne de gestionnaires de commandes.

Paramètres et valeur de retour Description
wParam BOOL bDisableIfNoHandler
lParam Non utilisé (0)
renvoie Non utilisé (0)

bDisableIfNoHandler n’est pas différent de zéro pour désactiver l’objet d’interface utilisateur s’il n’existe ni de ON_UPDATE_COMMAND_UI ni de gestionnaire de ON_COMMAND.

WM_EXITHELPMODE

Ce message est publié dans un CFrameWnd message qui permet de quitter le mode d’aide sensible au contexte. La réception de ce message met fin à la boucle modale démarrée par CFrameWnd::OnContextHelp.

Valeur de paramètre et de retour Description
wParam Non utilisé (0)
lParam Non utilisé (0)
renvoie Inutilisé

WM_INITIALUPDATE

Ce message est envoyé par le modèle de document à tous les descendants d’une fenêtre frame lorsqu’il est sûr qu’ils effectuent leur mise à jour initiale. Il mappe à un appel, CView::OnInitialUpdate mais peut être utilisé dans d’autres CWndclasses dérivées pour d’autres mises à jour ponctuelles.

Paramètres et valeur de retour Description
wParam Non utilisé (0)
lParam Non utilisé (0)
renvoie Non utilisé (0)

WM_RECALCPARENT

Ce message est envoyé par une vue à sa fenêtre parente (obtenue via GetParent) pour forcer un recalcul de disposition (généralement, le parent appellera RecalcLayout). Cela est utilisé dans les applications serveur OLE, où il est nécessaire que l’image augmente à mesure que la taille totale de la vue augmente.

Si la fenêtre parente traite ce message, elle doit retourner TRUE et remplir le RECT passé dans lParam avec la nouvelle taille de la zone cliente. Cela est utilisé pour CScrollView gérer correctement les barres de défilement (placer ensuite à l’extérieur de la fenêtre lorsqu’elles sont ajoutées) lorsqu’un objet serveur est activé sur place.

Paramètres et valeur de retour Description
wParam Non utilisé (0)
lParam LPRECT rectClient peut être NULL
renvoie TRUE si le nouveau rectangle client est retourné, FALSE sinon

WM_SIZECHILD

Ce message est envoyé par COleResizeBar sa fenêtre propriétaire (via GetOwner) lorsque l’utilisateur redimensionne la barre de redimensionnement avec les poignées de redimensionnement. COleIPFrameWnd répond à ce message en tentant de repositionner la fenêtre frame comme l’utilisateur l’a demandé.

Le nouveau rectangle, donné dans les coordonnées du client par rapport à la fenêtre de cadre qui contient la barre de redimensionnement, est pointé par lParam.

Paramètres et valeur de retour Description
wParam Non utilisé (0)
lParam LPRECT rectNew
renvoie Non utilisé (0)

WM_DISABLEMODAL

Ce message est envoyé à toutes les fenêtres contextuelles appartenant à une fenêtre frame en cours de désactivation. La fenêtre frame utilise le résultat pour déterminer s’il faut ou non désactiver la fenêtre contextuelle.

Vous pouvez l’utiliser pour effectuer un traitement spécial dans votre fenêtre contextuelle lorsque le cadre entre dans un état modal ou pour empêcher la désactivation de certaines fenêtres contextuelles. Les info-bulles utilisent ce message pour se détruire lorsque la fenêtre frame passe dans un état modal, par exemple.

Paramètres et valeur de retour Description
wParam Non utilisé (0)
lParam Non utilisé (0)
renvoie Non zéro pour ne pas désactiver la fenêtre, 0 indique que la fenêtre sera désactivée

WM_FLOATSTATUS

Ce message est envoyé à toutes les fenêtres contextuelles appartenant à une fenêtre frame lorsque le cadre est activé ou désactivé par une autre fenêtre frame de niveau supérieur. Cela est utilisé par l’implémentation de MFS_SYNCACTIVE dans CMiniFrameWnd, pour maintenir l’activation de ces fenêtres contextuelles synchronisées avec l’activation de la fenêtre frame de niveau supérieur.

Paramètres Description
wParam Est l’une des valeurs suivantes :

FS_SHOW

FS_HIDE

FS_ACTIVATE

FS_DEACTIVATE

FS_ENABLEFS_DISABLE

FS_SYNCACTIVE
lParam Non utilisé (0)

La valeur de retour doit être différente de zéro si FS_SYNCACTIVE est définie et que la fenêtre synchronise son activation avec le cadre parent. CMiniFrameWnd retourne une valeur différente de zéro lorsque le style est défini sur MFS_SYNCACTIVE.

Pour plus d’informations, consultez l’implémentation de CMiniFrameWnd.

WM_ACTIVATETOPLEVEL

Ce message est envoyé à une fenêtre de niveau supérieur lorsqu’une fenêtre de son « groupe de niveau supérieur » est activée ou désactivée. Une fenêtre fait partie d’un groupe de niveau supérieur s’il s’agit d’une fenêtre de niveau supérieur (aucun parent ou propriétaire) ou qu’elle appartient à une telle fenêtre. Ce message est similaire à WM_ACTIVATEAPP, mais fonctionne dans des situations où les fenêtres appartenant à différents processus sont mélangées dans une hiérarchie à fenêtre unique (courante dans les applications OLE).

WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE

Ces messages sont utilisés dans l’implémentation de l’aide contextuelle. Pour plus d’informations, consultez la note technique 28 .

Formats de ressources privées MFC

Actuellement, MFC définit deux formats de ressources privées : RT_TOOLBAR et RT_DLGINIT.

format de ressource RT_TOOLBAR

La barre d’outils par défaut fournie par AppWizard est basée sur une ressource personnalisée RT_TOOLBAR, qui a été introduite dans MFC 4.0. Vous pouvez modifier cette ressource à l’aide de l’éditeur de barre d’outils.

format de ressource RT_DLGINIT

Un format de ressource privée MFC est utilisé pour stocker des informations d’initialisation de boîte de dialogue supplémentaires. Cela inclut les chaînes initiales stockées dans une zone de liste déroulante. Le format de cette ressource n’est pas conçu pour être modifié manuellement, mais géré par Visual C++.

Visual C++ et cette ressource RT_DLGINIT ne sont pas nécessaires pour utiliser les fonctionnalités associées de MFC, car il existe une alternative d’API à l’utilisation des informations dans la ressource. L’utilisation de Visual C++ facilite l’écriture, la maintenance et la traduction de votre application à long terme.

La structure de base d’une ressource RT_DLGINIT est la suivante :

+---------------+    \
| Control ID    |   UINT             |
+---------------+    |
| Message #     |   UINT             |
+---------------+    |
|length of data |   DWORD            |
+---------------+    |   Repeated
|   Data        |   Variable Length  |   for each control
|   ...         |   and Format       |   and message
+---------------+    /
|     0         |   BYTE
+---------------+

Une section répétée contient l’ID de contrôle auquel envoyer le message, le message # à envoyer (message Windows normal) et une longueur variable de données. Le message Windows est envoyé dans un formulaire :

SendDlgItemMessage(<Control ID>, <Message #>, 0, &<Data>);

Il s’agit d’un format très général, autorisant tous les messages Windows et le contenu des données. L’éditeur de ressources Visual C++ et MFC prennent uniquement en charge un sous-ensemble limité de messages Windows : CB_ADDSTRING pour les options de liste initiale pour les zones de liste modifiable (les données sont une chaîne de texte).

Voir aussi

Notes techniques par numéro
Notes techniques par catégorie