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::RecalcLayout
CWnd::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 CWnd
von 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 CMiniFrameWnd
verwendet, 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