Freigeben über


DLGCBR32-Beispiel: Veranschaulicht, Hinzufügen einer Statusleiste und Symbolleisten zu Dialogfeldern

Das DLGCBR32-Beispiel veranschaulicht, wie eine Statusleiste und eine Symbolleiste zu einem Dialogfeld hinzugefügt wird. Außerdem zeigt es eine Reihe von Verfahren zur Verwendung eines nicht modalen Dialogfelds als das Hauptfenster von einer MFC-Anwendung.

In einer MFC-Anwendung können Sie an einem Rahmenfenster Steuerleisten, wie z. B. Statusleisten und Symbolleisten anfügen. Für viele Anwendungen ist jedoch eine einfaches Dialogfeld Feld-basierte Benutzeroberfläche ausreichend. MFC bietet keine integrierten Unterstützung zum Hinzufügen von Steuerleisten zu Dialogfeldern.

SicherheitshinweisSicherheitshinweis

Dieser Beispielcode soll ein Konzept veranschaulichen, und es wird nur den Code, der für dieses Konzept relevant sind. Möglicherweise erfüllt dieser nicht die Sicherheitsanforderungen für eine bestimmte Umgebung, und er sollte nicht genau wie dargestellt verwendet werden. Wir empfehlen, Sicherheits- und Fehlerbehandlungscode hinzuzufügen, um Ihre Projekte sicherer und stabiler zu machen. Microsoft stellt diesen Beispielcode "Wie besehen"keine Garantien.

So erhalten Sie Beispiele und Anweisungen für deren Installation:

Um Beispiele von Visual Studio zuzugreifen

  • im Menü Hilfe Menü klicken Beispiele.

    Standardmäßig sind die Beispiele in installiert. Laufwerk: \Programme\Microsoft visual Studio 10.0\Samples\.

  • Die neueste Version dieses Beispiels und eine Liste der anderen Beispiele finden Sie unter Visual Studio Samples auf der MSDN-Website.

Erstellen und Ausführen des Beispiels

So erstellen Sie und führen das DLGCBR32-Beispiel

  1. Öffnen Sie die Projektmappe DLGCBR32.sln.

  2. erstellen Sie Menü, klicken Sie auf erstellen.

  3. Debuggen Sie auf Menü, klicken Sie auf Starten ohne Debuggen.

Hinzufügen einer Steuerelement-Leiste zu einem Dialogfeld

Um das Dialogfeld eine Steuerleiste hinzuzufügen, erstellen Sie die Steuerleiste wie gewohnt, und schaffen Sie Platz für die Steuerleiste im Clientbereich des Dialogfelds. Für die Steuerleiste ordnungsgemäß funktioniert müssen Sie das Dialogfeld Teile der Funktionalität von einem Rahmenfenster duplizieren. Wenn Sie ON_UPDATE_COMMAND_UI -Handler die Steuerleisten möchten, müssen Sie auch neue Steuerleistenklassen ableiten und die Meldung WM_IDLEUPDATECMDUI behandeln. Wenn das Dialogfeld nicht das Hauptfenster der Anwendung ist, müssen Sie auch das übergeordnete Rahmenfenster die WM_IDLEUPDATECMDUI Meldung an das Dialogfeld des entsprechenden Feldes Steuerleisten übergeben wird.

Gehen Sie im Clientbereich des Dialogfelds Platz für eine Steuerleiste vornehmen, in des Dialogfelds OnInitDialog-Funktion folgendermaßen vor:

  1. Erstellen Sie die Steuerleisten. Ausfinden Sie her, wie viel Platz das Steuerelement Balken über die Option reposQueryRepositionBars dauert.

    CRect rcClientStart;
    CRect rcClientNow;
    GetClientRect(rcClientStart);
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST,
                   AFX_IDW_CONTROLBAR_LAST,
                   0, reposQuery, rcClientNow);
    
  2. Verschieben Sie die Steuerelemente in das Dialogfeld für den Speicherplatz von Steuerleisten am oberen oder linken Seite des Clientbereichs verwendete Konto. Wenn das Dialogfeld ein Menü enthält, müssen Sie auch für den Speicherplatz von im Menü verwendete Konto.

    CPoint ptOffset(rcClientNow.left - rcClientStart.left,
                    rcClientNow.top - rcClientStart.top);
    CRect rcChild;
    CWnd* pwndChild = GetWindow(GW_CHILD);
    while (pwndChild)
        {
           pwndChild->GetWindowRect(rcChild);
           ScreenToClient(rcChild);
           rcChild.OffsetRect(ptOffset);
           pwndChild->MoveWindow(rcChild, FALSE);
           pwndChild = pwndChild->GetNextWindow();
        }
    
  3. Erhöhen Sie im Dialogfeld Feld Fenster Dimensionen durch den Abstand von den Steuerleisten verwendet.

    CRect rcWindow;
    GetWindowRect(rcWindow);
    rcWindow.right += rcClientStart.Width() - rcClientNow.Width();
    rcWindow.bottom += rcClientStart.Height() - rcClientNow.Height();
    MoveWindow(rcWindow, FALSE);
    
  4. Positionieren Sie die Steuerleisten mithilfe von RepositionBars.

Um den ersten Bereich der Statusleiste mit Menü Elementtext zu aktualisieren, müssen Sie die WM_MENUSELECT, WM_ENTERIDLE, WM_SETMESSAGESTRINGund WM_POPMESSAGESTRING in der Dialogfeldklasse behandeln. Sie müssen die Funktionalität der CFrameWnd-Handler für diese Nachrichten zu duplizieren. Finden Sie in der CModelessMain-Klasse im Beispielprogramm Beispiele für diese Meldungshandler.

Für die Symbolleisten-Schaltflächen QuickInfos angezeigt werden soll, ist es erforderlich, die TTN_NEEDTEXTW und TTN_NEEDTEXTA Benachrichtigungen behandeln.

ON_UPDATE_COMMAND_UI -Handler andere Statusleistenbereiche und Symbolleisten-Schaltflächen unterstützen können, müssen Sie neue Steuerleistenklassen ableiten und einen Meldungshandler für WM_IDLEUPDATECMDUI implementieren. Dies ist erforderlich, da die Standardsteuerleisten-Implementierungen von OnUpdateCmdUI voraussetzen das übergeordnete Fenster eines Rahmenfensters ist. Allerdings wird OnUpdateCmdUI nichts aber übergeben des übergeordneten Fensters Zeiger auf eine Funktion nicht, die nur einen CCmdTarget-Zeiger benötigt. Daher können Sie vorübergehend OnUpdateCmdUI mitteilen, dass der übergeordnete Fenster Zeiger sind ein CFrameWnd Zeiger auf die Anforderungen des Compilers entspricht. Beispiel:

LRESULT CDlgToolBar::OnIdleUpdateCmdUI(WPARAM wParam, LPARAM lParam)
{
   if (IsWindowVisible())
   {
      CFrameWnd* pParent = (CFrameWnd*)GetParent();
      if (pParent)
         OnUpdateCmdUI(pParent, (BOOL)wParam);
   }
   return OL;
}

WM_IDLEUPDATECMDUI Nachrichten an Dialogfeldern als das Hauptfenster übergeben, Dialogzeiger in der Rahmenfensterklasse speichern und einen Handler WM_IDLEUPDATECMDUI in dieser Klasse erstellen. Der Handler muss die Meldung an das Dialogfeld für die WM_IDLEUPDATECMDUI untergeordneten Fenstern senden, mithilfe von CWnd::SendMessageToDescendants. Führen Sie Standardverarbeitung für die Nachricht innerhalb des Rahmenfensters.

Hinweis

Einige Beispiele, z. B. eine, wurden nicht geändert, um Änderungen in der Visual C++-Assistenten, Bibliotheken und Compiler, demonstrieren aber dennoch wie Sie die gewünschte Aufgabe durchführen.

Siehe auch

Weitere Ressourcen

MFC-Beispiele