TN024: MFC-definierte Meldungen und Ressourcen

Hinweis

Der folgende technische Hinweis wurde seit dem ersten Erscheinen in der Onlinedokumentation nicht aktualisiert. Daher können einige Verfahren und Themen veraltet oder falsch sein. Um aktuelle Informationen zu erhalten, wird empfohlen, das gewünschte Thema im Index der Onlinedokumentation zu suchen.

In diesem Hinweis werden die internen Windows-Nachrichten und Ressourcenformate beschrieben, die von MFC verwendet werden. In diesen Informationen wird die Implementierung des Frameworks erläutert und Sie beim Debuggen Ihrer Anwendung unterstützt. Für abenteuerlustige, obwohl alle diese Informationen offiziell nicht unterstützt werden, können Sie einige dieser Informationen für erweiterte Implementierungen verwenden.

Dieser Hinweis enthält Details zur privaten MFC-Implementierung; alle Inhalte können künftig geändert werden. Private Windows-Nachrichten von MFC haben bedeutungsrelevante Bedeutung nur im Bereich einer Anwendung, werden sich jedoch in Zukunft ändern, um systemweite Nachrichten zu enthalten.

Der Bereich privater Windows-Nachrichten und Ressourcentypen von MFC befindet sich im reservierten Bereich "System", der von Microsoft Windows reserviert wird. Derzeit werden nicht alle Zahlen in den Bereichen verwendet, und in Zukunft können neue Zahlen im Bereich verwendet werden. Die aktuell verwendeten Zahlen können geändert werden.

Private Windows-Nachrichten von MFC befinden sich im Bereich 0x360-0x37F>.

Private MFC-Ressourcentypen befinden sich im Bereich 0xF0-0xFF>.

Private Windows-Nachrichten von MFC

Diese Windows-Meldungen werden anstelle von virtuellen C++-Funktionen verwendet, bei denen relativ lose Kopplung zwischen Fensterobjekten erforderlich ist und eine virtuelle C++-Funktion nicht geeignet wäre.

Diese privaten Windows-Nachrichten und die zugehörigen Parameterstrukturen werden im privaten MFC-Header "AFXPRIV" deklariert. H'. Achten Sie darauf, dass ein Code, der diesen Header enthält, möglicherweise auf nicht dokumentiertes Verhalten angewiesen ist und in zukünftigen MFC-Versionen wahrscheinlich nicht mehr ausgeführt wird.

Im seltenen Fall, dass eine dieser Nachrichten verarbeitet werden muss, sollten Sie das ON_MESSAGE Nachrichtenzuordnungsmakro verwenden und die Nachricht im generischen LRESULT/WPARAM/LPARAM-Format behandeln.

WM_QUERYAFXWNDPROC

Diese Nachricht wird an ein Fenster gesendet, das erstellt wird. Dies wird sehr früh im Erstellungsprozess als Methode gesendet, um zu bestimmen, ob der WndProc AfxWndProc ist . AfxWndProc gibt 1 zurück.

Parameter und Rückgabewert Beschreibung
wParam Nicht verwendet
lParam Nicht verwendet
returns 1, wenn von AfxWndProc verarbeitet

WM_SIZEPARENT

Diese Nachricht wird von einem Framefenster an die unmittelbaren untergeordneten Elemente während der Größenänderung (CFrameWnd::OnSize Aufrufe CFrameWnd::RecalcLayout CWnd::RepositionBars) gesendet, um die Steuerleisten an der Seite des Frames neu zu positionieren. Die AFX_SIZEPARENTPARAMS-Struktur enthält das aktuelle verfügbare Clientrechteck des übergeordneten Elements und eine HDWP (die null sein kann), mit der die Aktualisierung minimiert werden soll DeferWindowPos .

Parameter und Rückgabewert Beschreibung
wParam Nicht verwendet
lParam Adresse einer AFX_SIZEPARENTPARAMS-Struktur
returns Nicht verwendet (0)

Wenn die Meldung ignoriert wird, wird angegeben, dass das Fenster nicht am Layout teilnimmt.

WM_SETMESSAGESTRING

Diese Nachricht wird an ein Rahmenfenster gesendet, um sie aufzufordern, die Nachrichtenzeile in der Statusleiste zu aktualisieren. Es kann entweder eine Zeichenfolgen-ID oder ein LPCSTR angegeben werden (aber nicht beides).

Parameter und Rückgabewert Beschreibung
wParam Zeichenfolgen-ID (oder Null)
lParam LPCSTR für die Zeichenfolge (oder NULL)
returns Nicht verwendet (0)

WM_IDLEUPDATECMDUI

Diese Nachricht wird im Leerlauf gesendet, um das Leerlaufzeitupdate von Updatebefehl-UI-Handlern zu implementieren. Wenn das Fenster (in der Regel eine Steuerelementleiste) die Nachricht verarbeitet, wird ein CCmdUI Objekt (oder ein Objekt einer abgeleiteten Klasse) erstellt und für jedes der "Elemente" im Fenster aufgerufen CCmdUI::DoUpdate . Dadurch wird wiederum nach einem ON_UPDATE_COMMAND_UI-Handler für die Objekte in der Befehlshandlerkette gesucht.

Parameter und Rückgabewert Beschreibung
wParam BOOL bDisableIfNoHandler
lParam Nicht verwendet (0)
returns Nicht verwendet (0)

bDisableIfNoHandler ist nonzero, um das UI-Objekt zu deaktivieren, wenn weder ein ON_UPDATE_COMMAND_UI noch ein ON_COMMAND-Handler vorhanden ist.

WM_EXITHELPMODE

Diese Nachricht wird in eine CFrameWnd Nachricht gepostet, die den kontextabhängigen Hilfemodus verlässt. Der Empfang dieser Nachricht beendet die modale Schleife, die von CFrameWnd::OnContextHelp.

Parameter und Rückgabewert Beschreibung
wParam Nicht verwendet (0)
lParam Nicht verwendet (0)
returns Nicht verwendet

WM_INITIALUPDATE

Diese Nachricht wird von der Dokumentvorlage an alle Nachfolger eines Framefensters gesendet, wenn sie sicher sind, dass sie ihre anfängliche Aktualisierung durchführen können. Er wird einem Aufruf zugeordnet CView::OnInitialUpdate , kann aber in anderen CWndabgeleiteten Klassen für andere One-Shot-Aktualisierungen verwendet werden.

Parameter und Rückgabewert Beschreibung
wParam Nicht verwendet (0)
lParam Nicht verwendet (0)
returns Nicht verwendet (0)

WM_RECALCPARENT

Diese Nachricht wird von einer Ansicht an das übergeordnete Fenster (abgerufen über GetParent) gesendet, um eine Layoutneuberechnung zu erzwingen (in der Regel wird das übergeordnete Element aufgerufen RecalcLayout). Dies wird in OLE-Serveranwendungen verwendet, bei denen es erforderlich ist, dass der Frame größer wird, wenn die Gesamtgröße der Ansicht wächst.

Wenn das übergeordnete Fenster diese Meldung verarbeitet, sollte sie TRUE zurückgeben und das in lParam übergebene RECT mit der neuen Größe des Clientbereichs ausfüllen. Dies wird verwendet CScrollView , um Bildlaufleisten ordnungsgemäß zu behandeln (platzieren Sie dann außerhalb des Fensters, wenn sie hinzugefügt werden), wenn ein Serverobjekt aktiviert ist.

Parameter und Rückgabewert Beschreibung
wParam Nicht verwendet (0)
lParam LPRECT rectClient, kann NULL sein
returns TRUE, wenn das neue Clientrechteck zurückgegeben wurde, andernfalls FALSE

WM_SIZECHILD

Diese Nachricht wird an COleResizeBar das Besitzerfenster (via GetOwner) gesendet, wenn der Benutzer die Größe der Größenänderungsleiste mit den Ziehpunkten zum Ändern der Größe ändert. COleIPFrameWnd antwortet auf diese Nachricht, indem versucht wird, das Framefenster so neu zu positionieren, wie der Benutzer angefordert hat.

Das neue Rechteck, das in Clientkoordinaten relativ zum Framefenster angegeben wird, das die Größenänderungsleiste enthält, wird von lParam hervorgehoben.

Parameter und Rückgabewert Beschreibung
wParam Nicht verwendet (0)
lParam LPRECT rectNew
returns Nicht verwendet (0)

WM_DISABLEMODAL

Diese Nachricht wird an alle Popupfenster gesendet, die einem Rahmenfenster gehören, das deaktiviert wird. Im Rahmenfenster wird das Ergebnis verwendet, um zu bestimmen, ob das Popupfenster deaktiviert werden soll.

Sie können dies verwenden, um eine spezielle Verarbeitung in Ihrem Popupfenster durchzuführen, wenn der Frame in einen modalen Zustand wechselt oder bestimmte Popupfenster nicht deaktiviert werden. QuickInfos verwenden diese Meldung, um sich selbst zu zerstören, wenn das Framefenster beispielsweise in einen modalen Zustand wechselt.

Parameter und Rückgabewert Beschreibung
wParam Nicht verwendet (0)
lParam Nicht verwendet (0)
returns Nicht null, um das Fenster nicht zu deaktivieren, 0 gibt an, dass das Fenster deaktiviert ist.

WM_FLOATSTATUS

Diese Nachricht wird an alle Popupfenster gesendet, die einem Rahmenfenster gehören, wenn der Frame entweder aktiviert oder durch ein anderes Framefenster auf oberster Ebene deaktiviert wird. Dies wird von der Implementierung von MFS_SYNCACTIVE in CMiniFrameWndverwendet, um die Aktivierung dieser Popupfenster mit der Aktivierung des Framefensters der obersten Ebene synchron zu halten.

Parameter Beschreibung
wParam Ist einer der folgenden Werte:

FS_SHOW

FS_HIDE

FS_ACTIVATE

FS_DEACTIVATE

FS_ENABLEFS_DISABLE

FS_SYNCACTIVE
lParam Nicht verwendet (0)

Der Rückgabewert sollte ungleich Null sein, wenn FS_SYNCACTIVE festgelegt ist und das Fenster seine Aktivierung mit dem übergeordneten Frame synchronisiert. CMiniFrameWnd gibt ungleich Null zurück, wenn die Formatvorlage auf MFS_SYNCACTIVE festgelegt ist.

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 entweder aktiviert oder deaktiviert wird. Ein Fenster ist Teil einer Gruppe auf oberster Ebene, wenn es sich um ein Fenster der obersten Ebene (kein übergeordnetes Fenster oder Besitzer) handelt oder es sich um ein solches Fenster handelt. Diese Meldung ist ähnlich wie bei WM_ACTIVATEAPP, funktioniert jedoch in Situationen, in denen Fenster, die zu verschiedenen Prozessen gehören, in einer einzelnen Fensterhierarchie gemischt werden (häufig in OLE-Anwendungen).

WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE

Diese Nachrichten werden in der Implementierung kontextsensitiver Hilfe verwendet. Weitere Informationen finden Sie in technischem Hinweis 28 .

Private MFC-Ressourcenformate

Derzeit definiert MFC zwei private Ressourcenformate: RT_TOOLBAR und RT_DLGINIT.

RT_TOOLBAR-Ressourcenformat

Die von AppWizard bereitgestellte Standardsymbolleiste basiert auf einer RT_TOOLBAR benutzerdefinierten Ressource, die in MFC 4.0 eingeführt wurde. Sie können diese Ressource mit dem Symbolleisten-Editor bearbeiten.

RT_DLGINIT-Ressourcenformat

Ein privates MFC-Ressourcenformat wird verwendet, um zusätzliche Dialogfeldinitialisierungsinformationen zu speichern. Dies schließt die anfänglichen Zeichenfolgen ein, die in einem Kombinationsfeld gespeichert sind. Das Format dieser Ressource ist nicht für die manuelle Bearbeitung konzipiert, wird jedoch von Visual C++ behandelt.

Visual C++ und diese RT_DLGINIT Ressource sind nicht erforderlich, um die zugehörigen Features von MFC zu verwenden, da es EINE API-Alternative zur Verwendung der Informationen in der Ressource gibt. Die Verwendung von Visual C++ erleichtert das Schreiben, Standard Und übersetzen Sie Ihre Anwendung langfristig.

Die grundlegende Struktur einer RT_DLGINIT-Ressource lautet wie folgt:

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

Ein wiederholter Abschnitt enthält die Steuerelement-ID, an die die Nachricht gesendet werden soll, die zu sendende Nachricht #(eine normale Windows-Nachricht) und eine variable Datenlänge. Die Windows-Nachricht wird in einem Formular gesendet:

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

Dies ist ein sehr allgemeines Format, das alle Windows-Nachrichten und Dateninhalte zulässt. Der Visual C++-Ressourcen-Editor und MFC unterstützen nur eine begrenzte Teilmenge von Windows-Nachrichten: CB_ADDSTRING für die anfängliche Listenauswahl für Kombinationsfelder (die Daten sind eine Textzeichenfolge).

Siehe auch

Technische Hinweise – nach Nummern geordnet
Technische Hinweise – nach Kategorien geordnet