Gewusst wie: Hinzufügen von Befehlsrouting zum Windows Forms-Steuerelement
CWinFormsView leitet Befehle und Aktualisierungsbefehls-UI-Nachrichten an das Benutzersteuerelement weiter, damit sie MFC-Befehle verarbeiten kann (z. B. Framemenüelemente und Symbolleistenschaltflächen).
Das Benutzersteuerelement verwendet ICommandTarget::Initialize zum Speichern eines Verweises auf das Befehlsquellobjekt in m_CmdSrc
, wie im folgenden Beispiel gezeigt. Um ICommandTarget
zu verwenden, müssen Sie einen Verweis auf mfcmifc80.dll hinzufügen.
Durch CWinFormsView
werden einige der allgemeinen MFC-Anzeigenbenachrichtigungen verarbeitet, indem diese an das verwaltete Benutzersteuerelement weitergeleitet werden. Zu diesen Benachrichtigungen gehören die Methoden OnInitialUpdate, OnUpdate und OnActivateView .
In diesem Thema wird davon ausgegangen, dass Sie zuvor "How to: Create the User Control and Host" in a Dialog Box and How to: Create the User Control and Host MDI View abgeschlossen haben.
So erstellen Sie die MFC-Hostanwendung
Öffnen Sie die Windows Forms-Steuerelementbibliothek, die Sie in How to: Create the User Control and Host in a Dialog Box erstellt haben.
Fügen Sie einen Verweis auf mfcmifc80.dll hinzu, den Sie ausführen können, indem Sie in Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten klicken, "Hinzufügen", "Verweis" auswählen und dann zu Microsoft Visual Studio 10.0\VC\atlmfc\lib navigieren.
Öffnen Sie UserControl1.Designer.cs, und fügen Sie die folgende using-Anweisung hinzu:
using Microsoft.VisualC.MFC;
Ändern Sie außerdem in UserControl1.Designer.cs die folgende Zeile:
partial class UserControl1
in:
partial class UserControl1 : System.Windows.Forms.UserControl, ICommandTarget
Fügen Sie diese Zeile als erste Zeile der Klassendefinition für
UserControl1
hinzu:private ICommandSource m_CmdSrc;
Fügen Sie die folgenden Methodendefinitionen zu
UserControl1
hinzu (die ID des MFC-Steuerelements wird im nächsten Schritt erstellt):public void Initialize (ICommandSource cmdSrc) { m_CmdSrc = cmdSrc; // need ID of control in MFC dialog and callback function m_CmdSrc.AddCommandHandler(32771, new CommandHandler (singleMenuHandler)); } private void singleMenuHandler (uint cmdUI) { // User command handler code System.Windows.Forms.MessageBox.Show("Custom menu option was clicked."); }
Öffnen Sie die MFC-Anwendung, die Sie in How to: Create the User Control and Host MDI View erstellt haben.
Fügen Sie eine Menüoption hinzu, die
singleMenuHandler
aufruft.Wechseln Sie zur Ressourcenansicht (STRG+UMSCHALT+E), erweitern Sie den Menüordner , und doppelklicken Sie dann auf IDR_MFC02TYPE. Der Menü-Editor wird angezeigt.
Fügen Sie unten im Menü "Ansicht " eine Menüoption hinzu. Beachten Sie die ID der Menüoption im Eigenschaftenfenster . Speichern Sie die Datei .
Öffnen Sie in Projektmappen-Explorer die Datei "Resource.h", kopieren Sie den ID-Wert für die soeben hinzugefügte Menüoption, und fügen Sie diesen Wert als ersten Parameter in den
m_CmdSrc.AddCommandHandler
Aufruf der Methode des C#-ProjektsInitialize
ein (ggf. ersetzen32771
).Erstellen Sie das Projekt, und führen Sie es aus.
Klicken Sie im Menü Erstellen auf Projektmappe erstellen.
Klicken Sie im Menü "Debuggen " auf "Start" ohne Debugging.
Wählen Sie die hinzugefügte Menüoption aus. Beachten Sie, dass die Methode in der DLL aufgerufen wird.
Siehe auch
Hosten eines Windows Forms-Benutzersteuerelements als MFC-Ansicht
ICommandSource-Schnittstelle
ICommandTarget-Schnittstelle