TN024 : Messages et ressources Définis par MFC
[!REMARQUE]
La note technique suivante n'a pas été modifiée depuis si c'était première inclus dans la documentation en ligne.Par conséquent, certaines procédures et rubriques peuvent être obsolètes ou incorrects.Pour obtenir les informations les plus récentes, il est recommandé que vous trouviez la rubrique d'intérêt dans l'index de la documentation en ligne.
Cette remarque décrit les messages internes de fenêtres et la ressource met en forme utilisé par les MFC.Ces informations pour l'implémentation de l'infrastructure, et vous aider pour déboguer votre application.Pour l'aventureux, bien que toutes ces informations soient officiellement non prises en charge, vous pouvez utiliser certains de ces informations pour les implémentations avancées.
Cette remarque contient les détails de l'implémentation privée MFC ; tout le contenu est susceptible de changer dans le futur.Les messages privés de fenêtres MFC possèdent la signification dans la portée d'une application uniquement mais changeront ultérieurement pour contenir les messages à l'échelle de le système.
La chaîne des messages privés de fenêtres MFC et les types de ressource dans une plage réservée « système » mettre de côté par Microsoft Windows.Actuellement tous les nombres des plages sont utilisés et, à l'avenir, de nouveaux nombres dans la plage peuvent être utilisés.Les nombres utilisés actuellement peuvent être modifiés.
Les messages privés de fenêtres MFC dans une plage 0x360->0x37F.
Les types de ressource privés MFC dans une plage 0xF0->0xFF.
Messages privés de fenêtres MFC
Ces messages windows sont utilisés à la place des fonctions virtuelles C++ où le couplage relativement faible est nécessaire entre les objets window et où la fonction virtuelle C++ ne serait pas appropriée.
Ces messages privés windows et structures associées des paramètres sont déclarés dans l'en-tête privé « AFXPRIV.H » MFC.Vous assurez qu'un de votre code qui inclut cet en-tête peuvent compter sur le comportement non documenté et enfonceront probablement les versions ultérieures MFC.
En cas de peut-être traiter un de ces messages, vous devez utiliser la macro de table des messages d' ON_MESSAGE et gérer le message au format du générique LRESULT/WPARAM/LPARAM.
WM_QUERYAFXWNDPROC
Ce message est envoyé à une fenêtre créée.Cela est envoyé très tôt dans le processus de création en tant que méthode pour déterminer si le est **AfxWndProc.**WndProc Retourne 1. d'AfxWndProc .
wParam |
Non utilisé |
lParam |
Non utilisé |
retourne « » |
1 si traité par AfxWndProc |
WM_SIZEPARENT
Ce message est envoyé par une fenêtre frame à ses enfants immédiats lors de le redimensionnement (CFrameWnd::OnSize appelle CFrameWnd::RecalcLayout qui appelle CWnd::RepositionBars) pour repositionner les barres de contrôles autour de le côté du frame.La structure d' AFX_SIZEPARENTPARAMS contient le rectangle client disponible actuel du parent et d'un HDWP (qui peut être NULL) avec laquelle appeler DeferWindowPos pour réduire redessiner.
wParam |
Non utilisé |
lParam |
Adresse d'une structure d' AFX_SIZEPARENTPARAMS |
retourne « » |
Non utilisé (0) |
En ignorant le message indique que la fenêtre ne participe pas à 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).
wParam |
ID de chaîne (ou zéro) |
lParam |
LPCSTR pour la chaîne (ou NULL) |
retourne « » |
Non utilisé (0) |
WM_IDLEUPDATECMDUI
Ce message est présente la durée d'inactivité d'implémenter la mise à jour comme des temps d'inactivité les gestionnaires de la mise à jour-commande interface utilisateur.Si la fenêtre (généralement une barre de contrôles) gère le message, elle crée un objet d' CCmdUI (ou un objet d'une classe dérivée) et l'appel CCmdUI::DoUpdate pour chacun des « éléments » dans la fenêtre.Cela vérifie ensuite un gestionnaire d' ON_UPDATE_COMMAND_UI pour les objets dans la chaîne du gestionnaire de commandes.
wParam |
bDisableIfNoHandler de BOOL |
lParam |
Non utilisé (0) |
retourne « » |
Non utilisé (0) |
le bDisableIfNoHandler est différent de zéro pour désactiver l'objet d'interface s'il n'existe ni ON_UPDATE_COMMAND_UI ni un gestionnaire d' ON_COMMAND .
WM_EXITHELPMODE
Ce message est publié dans CFrameWnd qui pour quitter le mode d'aide sensible au contexte.La réception de ce message termine la boucle modale démarrée par CFrameWnd::OnContextHelp.
wParam |
Non utilisé (0) |
lParam |
Non utilisé (0) |
retourne « » |
Non utilisé |
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 que celles-ci effectuent leur mise à jour d'origine.Il mappe à un appel à CView::OnInitialUpdate mais peut être utilisé dans l'autre CWndclasses dérivées de pour autre mettre à jour unique.
wParam |
Non utilisé (0) |
lParam |
Non utilisé (0) |
retourne « » |
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 appelle RecalcLayout).Cela est utilisé dans de OLE applications serveur où il est que le frame se développe en taille lorsque la taille totale de la vue se développe.
Si la fenêtre parente traite ce message elle doit retourner la valeur TRUE et remplir RECT passé dans le lParam avec le nouveau le taille de la zone cliente.Cela est utilisé dans CScrollView pour gérer correctement les barres de défilement (placez -les ensuite sur l'extérieur de la fenêtre lorsqu'ils sont ajoutés) lorsqu'un objet serveur est sur place activé.
wParam |
Non utilisé (0) |
lParam |
LPRECT rectClient, peut être NULL |
retourne « » |
TRUE si le nouveau rectangle client 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 dimensionnement avec les poignées de redimensionnement.COleIPFrameWnd répond à ce message en essayant de repositionner la fenêtre frame que l'utilisateur a demandé.
Le nouveau rectangle, donné dans les coordonnées clientes par rapport à la fenêtre frame qui contient la barre de dimensionnement, variable globale dans par le lParam.
wParam |
Non utilisé (0) |
lParam |
RectNew de LPRECT |
retourne « » |
Non utilisé (0) |
WM_DISABLEMODAL
Ce message est envoyé à toutes les fenêtres indépendantes détenues par une fenêtre frame qui est désactivée.La fenêtre frame utilise le résultat pour déterminer si désactiver la fenêtre indépendante.
Vous pouvez l'utiliser pour effectuer un traitement spécial dans votre fenêtre indépendante lorsque le frame entre dans un état modal ou pour conserver certaines fenêtres indépendantes de l'obtention désactivé.Les info-bulles utilisent ce message pour se détruire lorsque la fenêtre frame passe à l'état modal, par exemple.
wParam |
Non utilisé (0) |
lParam |
Non utilisé (0) |
retourne « » |
Différente de zéro en la de NOT la fenêtre, 0 indique la fenêtre sera désactivée |
WM_FLOATSTATUS
Ce message est envoyé à toutes les fenêtres indépendantes détenues par une fenêtre frame lorsque le frame est activé ou désactivé par une autre fenêtre frame de niveau supérieur.Utilisé par l'implémentation de MFS_SYNCACTIVE dans CMiniFrameWnd, pour conserver l'activation de ces fenêtres indépendantes synchronisé avec le activation de la fenêtre frame de niveau supérieur.
wParam |
Est 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 non nulle si FS_SYNCACTIVE est défini et la fenêtre syncronizes son activation avec le frame parent.CMiniFrameWnd retourne la valeur est différente de zéro lorsque le style est défini à MFS_SYNCACTIVE.
Pour plus d'informations, consultez l'implémentation d' CMiniFrameWnd.
WM_ACTIVATETOPLEVEL
Ce message est envoyé à une fenêtre de niveau supérieur lorsqu'une fenêtre à 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 il est détenu par une telle fenêtre.Ce message est semblable en service à WM_ACTIVATEAPP, mais fonctionne dans les situations où les fenêtres appartenant à différents processus sont combinées dans une hiérarchie d'une seule fenêtre (courantes dans les applications OLE).
WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE
Ces messages sont utilisés dans l'implémentation de l'aide contextuelle. Reportez -vous à note technique 28 pour plus d'informations.
Formats privés de ressource MFC
Actuellement, MFC définit deux formats privés de ressource : RT_TOOLBAR et RT_DLGINIT.
Format de ressource de RT_TOOLBAR
La barre d'outils par défaut fournie par AppWizard est basé sur une ressource personnalisée en RT_TOOLBAR , introduite dans MFC 4,0.Vous pouvez modifier cette ressource à l'aide de l'Éditeur de barres d'outils.
Format de ressource de RT_DLGINIT
Un format privé de ressource de MFC est utilisé pour stocker des informations supplémentaires d'initialisation de dialogue.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 est géré par Visual C++.
Visual C++ et cette ressource de RT_DLGINIT ne sont pas requis pour utiliser les fonctionnalités associées MFC comme il y a lieu d'API à utiliser les informations de la ressource.À l'aide de Visual C++ facilite grandement l'écriture, la conservation, et traduisant votre application à long terme.
La structure de base d'une ressource d' 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 du contrôle envoie le message à, le message # pour envoyer (un message normal windows) et un de longueur variable de données.Le message windows est introduit un formulaire :
SendDlgItemMessage(<Control ID>, <Message #>, 0, &<Data>);
Il s'agit d'un format standard, où tous les messages windows et contenu de données.L'éditeur de ressources Visual C++ et MFC prennent en charge uniquement un sous-ensemble limité de messages windows : CB_ADDSTRING pour les liste-choix initiaux pour les zones de liste déroulante (données est une chaîne de texte).