TN024: MFC benutzerdefinierte Nachrichten und Ressourcen

Diese Applikationsschrift beschreibt die interne Windows-Meldungen und Ressourcenformate von MFC verwendet. Diese Informationen erklärt die Umsetzung des Rechtsrahmens, und helfen Ihnen beim Debuggen Ihrer Anwendungs. Für Abenteuerlustige obwohl diese Informationen nicht offiziell unterstützt, können Sie einige dieser Informationen für erweiterter Implementierungen verwenden.

Dieser Hinweis enthält MFC privater Implementierungsdetails; Alle Inhalte unterliegen Änderungen in der Zukunft. MFC private Windows-Meldungen werden haben in den Bereich einer Anwendung nur Bedeutung jedoch in Zukunft an systemweite Nachrichten enthalten.

Der private Bereich von MFC Windows-Meldungen und Resource-Typen sind im Bereich reservierten "System" von Microsoft Windows reserviert. Derzeit noch nicht alle Zahlen in den Bereichen verwendet werden und, in Zukunft neue Zahlen im Bereich verwendet werden können. Die aktuell verwendeten Nummern können geändert werden.

Private MFC Windows sind Nachrichten für den Bereich 0x360-≫ 0x37F.

MFC private Ressource, die Typen für den Bereich 0xF0-&Gt sind; 0xFF.

MFC privaten Windows-Meldungen

Diese Windows-Meldungen werden verwendet, statt virtuelle C++-Funktionen wo ist verhältnismäßig loser Kopplung erforderlich zwischen Window-Objekte und eine virtuelle C++-Funktion nicht geeignet wäre.

Diese privaten Windows-Meldungen und zugeordnete Parameterstrukturen werden in den privaten MFC-Header deklariert ' AFXPRIV.H'. Seien Sie gewarnt, dass jeder Code, der diese Kopfzeile enthält auf undokumentierte Verhalten und wird wahrscheinliche in Zukunft Versionen von MFC verlassen werden kann.

In dem seltenen Fall, eine dieser Meldungen behandeln zu müssen sollten Sie verwenden Makro ON_MESSAGE Nachricht anzeigen und die Nachricht in der generischen LRESULT/WPARAM/LPARAM-Format verarbeiten.

WM_QUERYAFXWNDPROC

Diese Nachricht wird an ein Fenster gesendet, die erstellt wird. Dies wird als eine Methode zur Bestimmung, ob die WndProc ist sehr früh in den Prozess der Produktentstehung gesendet AfxWndProc. AfxWndProc gibt 1 zurück.

wParam Nicht verwendet
lParam Nicht verwendet
versandkosten 1 Wenn vom AfxWndProc verarbeitet

WM_SIZEPARENT

Diese Meldung wird durch ein Rahmenfenster an seine unmittelbar untergeordneten Elemente während der Größenänderung (CFrameWnd::OnSize Anrufe CFrameWnd::RecalcLayout die CWnd::RepositionBarsnennt) gesendet, positionieren die Steuerleisten an der Seite des Rahmens. Die AFX_SIZEPARENTPARAMS -Struktur enthält das aktuellen verfügbaren Clientrechteck des Mutterunternehmens und eine HDWP (die NULL sein kann) mit dem Aufruf DeferWindowPos Neuzeichnen zu minimieren.

wParam Nicht verwendet
lParam Adresse einer AFX_SIZEPARENTPARAMS -Struktur
versandkosten Nicht verwendet (0)

Ignorieren die Meldung gibt an, dass das Fenster in das Layout teilnehmen nicht.

WM_SETMESSAGESTRING

Diese Nachricht wird an ein Rahmenfenster gesendet, zu Fragen, um die Linie Meldung in der Statusleiste zu aktualisieren. Eine String-ID oder eine LPCSTR kann (aber nicht beide) angegeben werden.

wParam String-ID (oder NULL)
lParam LPCSTR für die Zeichenfolge (oder NULL)
versandkosten Nicht verwendet (0)

WM_IDLEUPDATECMDUI

Diese Meldung wird in Leerlaufzeiten gesendet, das Leerlaufzeit Update Update-Befehl UI-Handler implementiert. Wenn das Fenster (in der Regel eine Steuerleiste) die Nachricht verarbeitet, erstellt es ein CCmdUI -Objekt (oder ein Objekt einer abgeleiteten Klasse) und rufen Sie CCmdUI::DoUpdate für jeden der "Artikel" im Fenster. Dies wird wiederum für einen ON_UPDATE_COMMAND_UI -Handler für die Objekte in der Befehlshandler Kette überprüfen.

wParam BOOL bDisableIfNoHandler
lParam Nicht verwendet (0)
versandkosten Nicht verwendet (0)

bDisableIfNoHandler ist nicht NULL, das UI-Objekt zu deaktivieren, wenn es weder einen ON_UPDATE_COMMAND_UI noch einen Handler ON_COMMAND gibt.

WM_EXITHELPMODE

Diese Meldung ist für ein CFrameWnd gebucht, die kontextsensitive beenden Modus helfen. Der Erhalt dieser Nachricht beendet die modale Schleife gestartet von CFrameWnd::OnContextHelp.

wParam Nicht verwendet (0)
lParam Nicht verwendet (0)
versandkosten Nicht verwendet

WM_INITIALUPDATE

Diese Nachricht ist von der Dokumentvorlage für alle Nachfolger eines Rahmenfensters gesendet, wann es sicher für sie zu ihrer ersten Update zu tun. Es entspricht einem Aufruf von CView::OnInitialUpdate aber kann verwendet werden, in anderen CWnd-abgeleiteten Klassen für andere einmalige Aktualisierung.

wParam Nicht verwendet (0)
lParam Nicht verwendet (0)
versandkosten Nicht verwendet (0)

WM_RECALCPARENT

Diese Nachricht erhalten von einer Ansicht an sein übergeordnetes Fenster (erhältlich über GetParent) eine Neuberechnung Layout erzwingen (in der Regel wird das übergeordnete RecalcLayoutnennen). Dies wird in OLE-Server-Anwendungen verwendet, wo ist es notwendig für den Rahmen in der Größe wachsen, während die Ansicht Gesamtgröße wächst.

Wenn das übergeordnete Fenster diese Nachricht verarbeitet sollte es gibt wahr zurück, und füllen Sie das RECT übergeben in lParam mit der neuen Größe des Clientbereichs. Hiermit wird in CScrollView ordnungsgemäß Scrollbars (Ort, dann auf der Außenseite des Fensters, wenn sie hinzugefügt werden) wird ein Server-Objekt in-Place-aktiviert.

wParam Nicht verwendet (0)
lParam LPRECT RectClient, kann NULL sein
versandkosten TRUE, wenn neue Clientrechteck zurückgegeben, FALSE andernfalls

WM_SIZECHILD

Diese Meldung wurde gesendet von COleResizeBar auf sein Besitzerfenster (über die Methode "GetOwner") Wenn der Benutzer ändert die Größe-Bar mit der Ziehpunkte. COleIPFrameWnd reagiert auf diese Meldung, indem man versucht, das Frame-Fenster neu positionieren, da der Benutzer angefordert hat.

Das neue Rechteck, gegeben in Clientkoordinaten relativ an das Rahmenfenster enthält der Größenanpassungsleiste ist auf von lParam hingewiesen.

wParam Nicht verwendet (0)
lParam LPRECT rectNew
versandkosten Nicht verwendet (0)

WM_DISABLEMODAL

Diese Nachricht wird gesendet, um alle Popupfenster, die im Besitz von einem Rahmenfenster, die deaktiviert wird. Das Rahmenfenster verwendet das Ergebnis um zu bestimmen, ob das Popupfenster deaktivieren.

Können Sie diese spezielle Verarbeitung im Popupfenster ausführen, wenn der Frame einen modalen Zustand wechselt oder um zu verhindern, dass bestimmte Popupfenster immer deaktiviert. QuickInfos verwenden diese Nachricht an sich selbst zerstören, wenn das Frame-Fenster in einen modalen Zustand, zum Beispiel geht.

wParam Nicht verwendet (0)
lParam Nicht verwendet (0)
versandkosten Ungleich NULL nicht deaktivieren das Fenster, 0 angibt, dass das Fenster deaktiviert werden

WM_FLOATSTATUS

Diese Nachricht wird gesendet, um alle Popupfenster, die im Besitz von einem Frame-Fenster, wenn der Rahmen ist entweder aktiviert oder durch ein anderes Fenster der obersten Ebene Frame deaktiviert. Dies wird durch die Umsetzung des MFS_SYNCACTIVE in CMiniFrameWnd, verwendet, um die Aktivierung dieser Popup-Fenster mit der Aktivierung des Fensters der obersten Ebene Frame synchron zu halten.

wParam Ist einer der folgenden Werte:
FS_SHOW
FS_HIDE
FS_ACTIVATE
FS_DEACTIVATE
FS_ENABLE
FS_DISABLE
FS_SYNCACTIVE
lParam Nicht verwendet (0)

Der Rückgabewert sollte nicht NULL, wenn FS_SYNCACTIVE festgelegt und das Fenster Syncronizes ist die Aktivierung mit dem übergeordneten Frame. CMiniFrameWnd ungleich NULL zurück, wenn das Format, um festgelegt ist MFS_SYNCACTIVE.

Weitere Informationen finden Sie in der Implementierung von CMiniFrameWnd.

WM_ACTIVATETOPLEVEL

Diese Nachricht wird an ein Fenster der obersten Ebene gesendet, wenn ein Fenster in der "Gruppe der obersten Ebene" aktiviert oder deaktiviert ist. Ein Fenster ist Teil einer Gruppe der obersten Ebene, wenn es ein Fenster der obersten Ebene (keine Eltern oder Eigentümer), oder es ist im Besitz von ein Fenster. Diese Meldung wird ähnlich verwendet wie WM_ACTIVATEAPP, aber funktioniert in Situationen, in denen Windows gehören verschiedene Prozesse in einer einzigen Fenster Hierarchie (in OLE-Anwendungen üblich) gemischt werden.

WM_QUERY3DCONTROLS

Diese Meldung wird während der Erstellung der Fenster gesendet, um festzustellen, ob das Fenster von CTL3D32 in Unterklassen unterteilt werden sollte.DLL. durch 3D Standardsteuerelemente für aktiviert sind CControlBar, CDialog, CPropertySheet, und CFormView.

wParam Nicht verwendet (0)
lParam Nicht verwendet (0)
versandkosten U&ngleich 0, so bilden Sie Unterklassen mit CTL3D.nbsp; Der Rückgabewert wird verwendet für den Aufruf von Ctl3dSubclassDlgEx.

WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE

Diese Meldungen werden bei der Umsetzung der kontextbezogene Hilfe verwendet. Für weitere Informationen siehe technische Anmerkung 28.

MFC Private Ressource Formate

Derzeit gibt es nur eine MFC private Ressource definierte Format, RT_DLGINIT.

RT_DLGINIT Ressourcenformat

Eine MFC-private Ressource-Format wird verwendet, um zusätzliche Dialogfeld Initialisierungsinformationen speichern. Dazu gehören die ursprünglichen Zeichenfolgen in einer Combo-Box gespeichert. Das Format dieser Ressource soll nicht manuell bearbeitet werden, aber von Visual C++ behandelt wird.

Visual C++ und diese Ressource RT_DLGINIT sind nicht erforderlich, die verwandten Funktionen von MFC verwenden, da es API Alternative zur Verwendung der Informationen in der Ressource gibt. Mithilfe von Visual C++ macht es viel einfacher zu schreiben, verwalten und Ihre Anwendung auf lange Sicht zu übersetzen.

Die grundlegende Struktur einer Ressource RT_DLGINIT ist wie folgt:

+---------------+nbsp;                   \
| ID Steuern |   UI&NT |
+---------------+                    |
| Nachricht # |   UINT |
+---------------+                    |
|length Daten |   DWORD |
+---------------+                    | Wiederholt
|   Daten |   Variabler Länge |   für jedes Steuerelement
|     ...      |   und Format |   und Meldung
+---------------+                    /
|     0         |   BYTE
+---------------+

Ein wiederholter Abschnitt enthält die Steuerelement-ID zum Senden der Nachricht, die Nachricht # senden (eine normale Windows-Nachricht) und eine Variable Länge der Daten. In einem Formular wird die Windows-Nachricht gesendet.:

SendDlgItemMessage (Lt;Steuerelement-ID >, < Meldung #, > 0 & <Data>)

Dies ist ein sehr allgemeines Format, so dass alle Windows-Meldungen und Daten. Der Ressourcen-Editor von Visual C++ und MFC unterstützen nur eine begrenzte Teilmenge von Windows-Meldungen: CB_ADDSTRING für die anfänglichen Liste-Auswahlmöglichkeiten für Kombinationsfelder (die Daten ist ein Text-String).

Technische Hinweise von &Nummer |nbsp; Technische Hinweise nach Kategorie

Index