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 Meldungen und Ressourcenformate beschrieben, die von MFC verwendet werden. Diese Informationen erläutern die Implementierung des Frameworks und unterstützen Sie beim Debuggen Ihrer Anwendung. 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 in Zukunft geändert werden. Private MFC-Windows Nachrichten haben nur im Bereich einer Anwendung eine Bedeutung, werden sich jedoch in Zukunft ändern, um systemweite Nachrichten zu enthalten.

Der Bereich privater MFC-Windows Nachrichten und Ressourcentypen liegt im reservierten "Systembereich", 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 derzeit verwendeten Zahlen können geändert werden.

Private MFC-Windows-Nachrichten liegen im Bereich 0x360 0x37F>.

Private MFC-Ressourcentypen liegen im Bereich 0xF0 0xFF>.

Private MFC-Windows-Nachrichten

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

Diese privaten Windows Nachrichten und zugeordnete Parameterstrukturen werden im privaten MFC-Header "AFXPRIV" deklariert. H'. Sie werden gewarnt, dass jeder Code, der diesen Header enthält, möglicherweise nicht dokumentiertes Verhalten verwendet und in zukünftigen Versionen von MFC wahrscheinlich nicht mehr reagiert.

In den seltenen Fällen, in dem sie eine dieser Nachrichten verarbeiten müssen, sollten Sie das ON_MESSAGE Meldungszuordnungsmakro verwenden und die Nachricht im generischen LRESULT/WPARAM/LPARAM-Format behandeln.

WM_QUERYAFXWNDPROC

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

Parameter und Rückgabewert BESCHREIBUNG
wParam Nicht verwendet
lParam Nicht verwendet
gibt Folgendes zurück: 1 bei Verarbeitung durch AfxWndProc

WM_SIZEPARENT

Diese Meldung wird während der Größenänderung von einem Rahmenfenster an die unmittelbaren untergeordneten Elemente gesendet (CFrameWnd::OnSize aufruft CFrameWnd::RecalcLayoutCWnd::RepositionBars), um die Steuerleisten um die 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 aufgerufen DeferWindowPos werden soll, um das erneute Zeichnen zu minimieren.

Parameter und Rückgabewert BESCHREIBUNG
wParam Nicht verwendet
lParam Adresse einer AFX_SIZEPARENTPARAMS-Struktur
gibt Folgendes zurück: Nicht verwendet (0)

Das Ignorieren der Meldung gibt an, dass das Fenster nicht am Layout beteiligt ist.

WM_SETMESSAGESTRING

Diese Nachricht wird an ein Rahmenfenster gesendet, um sie aufzufordern, die Meldungszeile 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)
gibt Folgendes zurück: Nicht verwendet (0)

WM_IDLEUPDATECMDUI

Diese Meldung wird in leerer Zeit gesendet, um das Leerlaufzeitupdate von Benutzeroberflächenhandlern für update-command zu implementieren. Wenn das Fenster (normalerweise eine Steuerleiste) die Nachricht verarbeitet, erstellt es ein CCmdUI -Objekt (oder ein Objekt einer abgeleiteten Klasse) und ruft CCmdUI::DoUpdate für jedes der "Elemente" im Fenster auf. 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)
gibt Folgendes zurück: Nicht verwendet (0)

bDisableIfNoHandler ist nicht 0 (null), um das UI-Objekt zu deaktivieren, wenn weder ein ON_UPDATE_COMMAND_UI noch ein ON_COMMAND Handler vorhanden ist.

WM_EXITHELPMODE

Diese Meldung wird an eine CFrameWnd gesendet, die den kontextabhängigen Hilfemodus beendet. Der Empfang dieser Nachricht beendet die modale Schleife, die von gestartet wurde CFrameWnd::OnContextHelp.

Parameter und Rückgabewert BESCHREIBUNG
wParam Nicht verwendet (0)
lParam Nicht verwendet (0)
gibt Folgendes zurück: Nicht verwendet

WM_INITIALUPDATE

Diese Meldung wird von der Dokumentvorlage an alle Nachfolger eines Rahmenfensters gesendet, wenn es sicher ist, dass sie ihre erste Aktualisierung durchführen können. Sie wird einem Aufruf von CView::OnInitialUpdate zugeordnet, kann aber in anderen CWndvon abgeleiteten Klassen für andere einmalige Aktualisierungen verwendet werden.

Parameter und Rückgabewert BESCHREIBUNG
wParam Nicht verwendet (0)
lParam Nicht verwendet (0)
gibt Folgendes zurück: Nicht verwendet (0)

WM_RECALCPARENT

Diese Meldung wird von einer Ansicht an das übergeordnete Fenster gesendet (abgerufen über GetParent), um eine Neuberechnung des Layouts zu erzwingen (normalerweise ruft das übergeordnete Element auf RecalcLayout). Dies wird in OLE-Serveranwendungen verwendet, bei denen es erforderlich ist, dass der Frame größer wird, wenn die Gesamtgröße der Ansicht zunimmt.

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

Parameter und Rückgabewert BESCHREIBUNG
wParam Nicht verwendet (0)
lParam LPRECT rectClient, kann NULL sein
gibt Folgendes zurück: TRUE, wenn ein neues Clientrechteck zurückgegeben wird, andernfalls FALSE

WM_SIZECHILD

Diese Meldung wird von COleResizeBar an das Besitzerfenster (über GetOwner) gesendet, wenn der Benutzer die Größe der Größenänderungsleiste mit den Größenänderungshandles angibt. COleIPFrameWnd antwortet auf diese Meldung, indem versucht wird, das Rahmenfenster so neu zu positionieren, wie der Benutzer dies angefordert hat.

Auf das neue Rechteck, das in Clientkoordinaten relativ zum Rahmenfenster mit der Größenänderungsleiste angegeben ist, zeigt lParam.

Parameter und Rückgabewert BESCHREIBUNG
wParam Nicht verwendet (0)
lParam LPRECT rectNeu
gibt Folgendes zurück: Nicht verwendet (0)

WM_DISABLEMODAL

Diese Meldung wird an alle Popupfenster gesendet, die sich im Besitz eines frame-Fensters befinden, das deaktiviert wird. Das Rahmenfenster verwendet das Ergebnis, 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 um zu sorgen, dass bestimmte Popupfenster nicht deaktiviert werden. QuickInfos verwenden diese Meldung, um sich selbst zu zerstören, wenn z. B. das Rahmenfenster in einen modalen Zustand wechselt.

Parameter und Rückgabewert BESCHREIBUNG
wParam Nicht verwendet (0)
lParam Nicht verwendet (0)
gibt Folgendes zurück: Ungleich 0 (null), um das Fenster NICHT zu deaktivieren. 0 gibt an, dass das Fenster deaktiviert wird.

WM_FLOATSTATUS

Diese Meldung wird an alle Popupfenster gesendet, die sich im Besitz eines Rahmenfensters befinden, wenn der Frame von einem anderen Rahmenfenster der obersten Ebene aktiviert oder deaktiviert wird. Dies wird von der Implementierung von MFS_SYNCACTIVE in CMiniFrameWndverwendet, um die Aktivierung dieser Popupfenster mit der Aktivierung des Rahmenfensters der obersten Ebene synchron zu halten.

Parameter BESCHREIBUNG
wParam Weist einen der folgenden Werte auf:

FS_SHOW

FS_HIDE

FS_ACTIVATE

FS_DEACTIVATE

FS_ENABLEFS_DISABLE

FS_SYNCACTIVE
lParam Nicht verwendet (0)

Der Rückgabewert sollte ungleich 0 (null) sein, wenn FS_SYNCACTIVE festgelegt ist und das Fenster seine Aktivierung mit dem übergeordneten Frame synchronisiert. CMiniFrameWnd gibt ungleich 0 (null) zurück, wenn der Stil auf MFS_SYNCACTIVE festgelegt ist.

Weitere Informationen finden Sie in der Implementierung von CMiniFrameWnd.

WM_ACTIVATETOPLEVEL

Diese Meldung wird an ein Fenster der obersten Ebene gesendet, wenn ein Fenster in der gruppe der obersten Ebene aktiviert oder deaktiviert wird. Ein Fenster ist Teil einer Gruppe der obersten Ebene, wenn es sich um ein Fenster der obersten Ebene handelt (kein übergeordnetes Fenster oder Besitzer) oder sich im Besitz eines solchen Fensters befindet. Diese Meldung wird ähnlich wie WM_ACTIVATEAPP verwendet, funktioniert jedoch in Situationen, in denen Fenster, die zu unterschiedlichen Prozessen gehören, in einer einzelnen Fensterhierarchie (in OLE-Anwendungen üblich) gemischt werden.

WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE

Diese Nachrichten werden in der Implementierung kontextabhängiger Hilfe verwendet. Weitere Informationen finden Sie im technischen Hinweis 28 .

Formate für private MFC-Ressourcen

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 mithilfe des Symbolleisten-Editors bearbeiten.

RT_DLGINIT-Ressourcenformat

Ein MFC-Format für private Ressourcen wird verwendet, um zusätzliche Dialoginitialisierungsinformationen 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 vorgesehen, sondern wird von Visual C++ verarbeitet.

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++ vereinfacht das Schreiben, Verwalten und Übersetzen Ihrer Anwendung auf lange Sicht erheblich.

Die grundlegende Struktur einer RT_DLGINIT Ressource sieht wie folgt aus:

+---------------+    \
| 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 Länge von Daten. 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änglichen Listenoptionen für Kombinationsfelder (die Daten sind eine Textzeichenfolge).

Weitere Informationen

Technische Hinweise nach Zahl
Technische Hinweise nach Kategorie