TN024 : Messages MFC-définis et les ressources

Cette note décrit les messages internes de Windows et des formats de ressources utilisés par les MFC. Cette information explique la mise en œuvre du cadre et vous aidera dans le débogage de votre application. Pour les aventureux, même si toute cette information est officiellement non pris en charge, vous pouvez utiliser certaines de ces informations pour les implémentations avancées.

Cette note contient des détails d'implémentation privés de MFC ; tous les contenus sont sujets à changement à l'avenir. Messages privés de Windows MFC ont un sens dans le champ d'une application seule mais vont changer dans l'avenir pour contenir des messages système.

Les messages Windows privés de plage de MFC et types de ressources sont dans la plage réservée « système » annulées par Microsoft Windows. Actuellement pas de tous les nombres dans les gammes sont utilisées et, dans l'avenir, de nouveaux numéros dans la gamme peut être utilisé. Les numéros actuellement utilisés peuvent être modifiées.

MFC privé Windows messa&ges sont dans la gamme 0x360-gt ; 0x37F.

Les ressources privées MFC types sont dans la &gamme 0xF0-gt ; 0xFF.

MFC privé Windows Messages

Ces messages de Windows sont utilisés à la place des fonctions virtuelles C++ où couplage relativement lâche est nécessaire entre les objets de la fenêtre, et où une fonction virtuelle C++ ne serait pas appropriée.

Ces messages privés de Windows et le paramètre associé à des structures sont déclarées dans l'en-tête privé MFC ' AFXPRIV.H'. Sachez que de votre code qui comprend cet en-tête peut être invoquant sans papiers de comportement et de la volonté de rupture probable dans un avenir versions des MFC.

Dans les rares cas de devoir gérer un de ces messages, vous devez utiliser la macro ON_MESSAGE message et gérer le message dans le format générique de LRESULT/WPARAM et LPARAM.

WM_QUERYAFXWNDPROC

Ce message est envoyé à une fenêtre qui est en cours de création. C'est envoyé très tôt dans le processus de création comme une méthode pour déterminer si WndProc est AfxWndProc. AfxWndProc renvoie la valeur 1.

wParam Non utilisé
lParam Non utilisé
retourne 1 si traitées par AfxWndProc

WM_SIZEPARENT

Ce message est envoyé par une fenêtre frame à ses enfants immédiats pendant le redimensionnement (CFrameWnd::OnSize appelle CFrameWnd::RecalcLayout qui appelle CWnd::RepositionBars) afin de repositionner les barres de contrôle autour du côté de l'image. La structure AFX_SIZEPARENTPARAMS contient le rectangle client disponible courant du parent et d'un HDWP (qui peut être NULL) avec lequel appeler Error_invalid_dwp_handle pour minimiser les repeindre.

wParam Non utilisé
lParam Adresse d'une structure AFX_SIZEPARENTPARAMS
retourne Non utilisé (0)

En ignorant le message indique que la fenêtre ne prend pas partie dans la mise en page.

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 String ID (ou zéro)
lParam LPCSTR pour la chaîne (ou NULL)
retourne Non utilisé (0)

WM_IDLEUPDATECMDUI

Ce message est envoyé dans les temps d'inactivité de la mise à jour de temps de marche au ralenti des gestionnaires de l'interface utilisateur mise à jour-commande de mettre en œuvre. Si la fenêtre (généralement une barre de contrôle) gère le message, il crée un objet CCmdUI (ou un objet d'une classe dérivée) et appelez CCmdUI::DoUpdate pour chacune des « éléments » dans la fenêtre. Cela vérifiera à son tour pour un gestionnaire d'événements ON_UPDATE_COMMAND_UI pour les objets dans la chaîne de commande-gestionnaire.

wParam BOOL bDisableIfNoHandler
lParam Non utilisé (0)
retourne Non utilisé (0)

bDisableIfNoHandler est différent de zéro pour désactiver l'objet UI si il n'y a ni un ON_UPDATE_COMMAND_UI ni un gestionnaire d'événements ON_COMMAND.

WM_EXITHELPMODE

Ce message est affiché à une CFrameWnd permettant de sortir contextuelle mode. La réception de ce message termine la boucle modale a commencé 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 pour eux de faire leur mise à jour initiale. Il mappe à un appel à CView::OnInitialUpdate mais peuvent être utilisé dans les autres CWnd-dérivée des classes d'autres mise à jour One-Shot.

wParam Non utilisé (0)
lParam Non utilisé (0)
retourne Non utilisé (0)

WM_RECALCPARENT

Ce message est envoyé par un point de vue de sa fenêtre parente (obtenu par GetParent) pour forcer un recalcul de la mise en page (généralement, le parent appellerai RecalcLayout). Elle est utilisée dans des applications de serveur OLE lorsque cela est nécessaire pour la trame de grandir en taille que la taille totale de la vue se développe.

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

wParam Non utilisé (0)
lParam LPRECT rectClient, peut être NULL
retourne Rectangle TRUE si nouveau client revient, FALSE sinon

WM_SIZECHILD

Ce message est envoyé par le 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 essayant de repositionner la fenêtre frame que l'utilisateur a demandé.

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

wParam Non utilisé (0)
lParam LPRECT rectNew
retourne Non utilisé (0)

WM_DISABLEMODAL

Ce message est envoyé à toutes les fenêtres popup, appartenus à une fenêtre frame qui est actuellement désactivée. La fenêtre frame utilise le résultat pour déterminer ou non désactiver la fenêtre popup.

Vous pouvez utiliser cela pour effectuer un traitement spécial dans votre fenêtre popup lorsque le cadre entre un état modal ou à empêcher l'obtention désactivé certaines fenêtres popup. Les info-bulles utilisent ce message pour détruire eux-mêmes lorsque la fenêtre frame passe en un état modal, par exemple.

wParam Non utilisé (0)
lParam Non utilisé (0)
retourne Différente de zéro pour pas désactiver la fenêtre, la valeur 0 indique la fenêtre sera désactivée

WM_FLOATSTATUS

Ce message est envoyé à toutes les fenêtres popup, appartenus à une fenêtre frame, lorsque l'image est activée ou désactivée par une autre fenêtre de niveau supérieur frame. Ceci est utilisé par la mise en œuvre de MFS_SYNCACTIVE de CMiniFrameWnd, de conserver l'activation de ces fenêtres popup synchronisés avec l'activation de la fenêtre frame de niveau haut de la page.

wParam Est l'une des valeurs suivantes :
FS_SHOW
FS_HIDE
FS_ACTIVATE
FS_DEACTIVATE
FS_ENABLE
FS_DISABLE
FS_SYNCACTIVE
lParam Non utilisé (0)

La valeur de retour doit être différent de zéro si FS_SYNCACTIVE est définie et des synchroniser de fenêtre son activation avec le frame parent. CMiniFrameWnd retourne zéro lorsque le style est défini sur MFS_SYNCACTIVE.

Pour plus d'informations, voir la mise en œuvre de CMiniFrameWnd.

WM_ACTIVATETOPLEVEL

Ce message est envoyé à une fenêtre de niveau supérieur lorsqu'une fenêtre dans son « groupe de haut niveau » est activée ou désactivée. Une fenêtre fait partie d'un groupe de niveau supérieur si c'est une fenêtre de niveau supérieur (aucun parent ou propriétaire), ou elle est détenue par une telle fenêtre. Ce message est semblable à l'utilisation de WM_ACTIVATEAPP, mais fonctionne dans des situations où windows appartenant à différents processus sont mélangés dans une hiérarchie de guichet unique (courante dans les applications OLE).

WM_QUERY3DCONTROLS

Ce message est envoyé lors de la création de la fenêtre afin de déterminer si la fenêtre doit être sous-classées par CTL3D32.DLL. contrôles 3D par défaut sont activés pour CControlBar, CDialog, CPropertySheet et CFormView.

wParam Non utilisé (0)
lParam Non utilisé (0)
retourne Différe&nte de zéro pour la sous-classe avec CTL3D.nbsp ; La valeur de retour est utilisée pour l'appel à Ctl3dSubclassDlgEx.

WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE

Ces messages sont utilisés dans la mise en œuvre de l'aide contextuelle. Veuillez vous référer aux techniques Note 28 pour plus d'informations.

Formats de ressources MFC privé

Il existe actuellement un seul MFC ressources privées format défini, RT_DLGINIT.

Format de ressource RT_DLGINIT

Un format de ressource privée MFC est utilisé pour stocker les informations d'initialisation de boîte de dialogue supplémentaire. Cela comprend les chaînes initiales stockés dans une zone de liste modifiable. Le format de cette ressource n'est pas conçu pour être édité manuellement, mais il est géré par Visual C++.

Visual C++ et cette ressource RT_DLGINIT ne sont pas tenus d'utiliser les fonctionnalités connexes de MFC, car il y a alternative de l'API à l'aide des informations de la ressource. À l'aide de Visual C++ le rend beaucoup plus facile à écrire, à maintenir et à traduire votre application à long terme.

Voici la structure de base d'une ressource RT_DLGINIT:

+---------------+nbsp;                   \
| ID de contrôle |   UI&NT |
+---------------+                    |
| Message # |   UINT |
+---------------+                    |
|length de données |   DWORD |
+---------------+                    | Répété
|   Données |   Longueur variable |   pour chaque contrôle
|     ...      |   et le Format |   et le message
+---------------+                    /
|     0         |   OCTETS
+---------------+

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

SendDlgItemMessage (lt ;ID de contrôle >, < Message # >, 0, & <Data>)

Il s'agit d'un format très général, permettant à tous les messages Windows et contenu des données. L'éditeur de ressources Visual C++ et MFC ne prennent en charge un sous-ensemble limité de messages Windows : CB_ADDSTRING pour les premiers choix de liste pour les zones de liste déroulante (les données sont une chaîne de texte).

&Notes techniques par le numéro |nbsp ; Notes techniques par catégorie

Index