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