Exemplarische Vorgehensweise: Aktualisieren der MFC-Scribble-Anwendung (Teil 2)

Teil 1 dieser exemplarischen Vorgehensweise wurde erläutert, wie ein Office-fließenden Scribble-Anwendung der klassischen Menüband hinzugefügt wird.Dieser Bereich zeigt, wie Menüband Bereiche und Steuerelemente hinzugefügt werden, dass Benutzer anstelle von Menüs und die Befehle verwenden können.

Vorbereitungsmaßnahmen

Visual C++-Beispiele

Abschnitte

In diesem Teil der exemplarischen Vorgehensweise enthält folgende Abschnitte:

  • Die neue Bereiche hinzufügen zum Menüband

  • Hinzufügen eines Hilfe-Bereich zum Menüband

  • Hinzufügen eines Stifts-Bereich zum Menüband

  • Eine Farben-Schaltfläche hinzufügen zum Menüband

  • Hinzufügen eines Farben-Member der Dokumentklasse

  • Stifte und Speichern von Einstellungen initialisieren

Die neue Bereiche hinzufügen zum Menüband

folgenden Schritte zeigen, wie ein Ansicht Bereich, der die beiden Kontrollkästchen enthält, die die Sichtbarkeit der Symbolleiste und der Statusleiste steuern und außerdem ein Fenster Bereich hinzugefügt wird, der eine vertikale orientierte unterteilte Schaltfläche enthält, die die Erstellung und die Anordnung von Windows (Multiple Document Interface) steuert.

So fügen Sie einen Ansichts-Bereich und ein Fensterelement der Menüband hinzufügen leiste

  1. Erstellen Sie einen Bereich, der Sicht benannt ist, der beiden Kontrollkästchen verfügt, die die Statusleiste und die Symbolleiste zu aktivieren bzw. zu deaktivieren.

    1. Ziehen Sie aus ToolboxBereich zur Startseite Kategorie.Dann Ziehen Sie zwei Kontrollkästchen für den Bereich.

    2. Klicken Sie auf den Bereich, dessen Eigenschaften zu ändern.Beschriftung Änderung an Sicht.

    3. Klicken Sie auf das erste Kontrollkästchen, um deren Eigenschaften zu ändern.Ändern Sie ID zu ID_VIEW_TOOLBAR und Beschriftung zu Symbolleiste.

    4. Klicken Sie auf das zweite Kontrollkästchen, um deren Eigenschaften zu ändern.Ändern Sie ID zu ID_VIEW_STATUS_BAR und Beschriftung zu Statusleiste.

  2. Erstellen Sie einen Bereich, der Fenster benannt wird, der eine unterteilte Schaltfläche wird.Wenn ein Benutzer auf die Schaltfläche klickt, unterteilte Anzeigen eines Kontextmenüs drei Befehle, die bereits in der Scribble-Anwendung definiert sind.

    1. Ziehen Sie aus ToolboxBereich zur Startseite Kategorie.Ziehen Sie dann dem Bereich Schaltfläche.

    2. Klicken Sie auf den Bereich, dessen Eigenschaften zu ändern.Beschriftung Änderung an Fenster.

    3. Klicken Sie auf die Schaltfläche.Ändern Sie Beschriftung zu Windows, Schlüssel zu w, Großer Bildindex zu 1 und Geteilter Modus zu False.Klicken Sie anschließend auf die Schaltfläche mit den Auslassungszeichen () neben ###… Menüelemente, um das Elemente-Editor Dialog Box zu öffnen.

    4. Klicken Sie auf Hinzufügen dreimal, drei Schaltflächen hinzuzufügen.

    5. Klicken Sie auf die erste Schaltfläche und ändern Sie dann Beschriftung zu Ein neues Fenster und ID zu ID_WINDOW_NEW.

    6. Klicken Sie auf die zweite Schaltfläche und ändern Sie dann Beschriftung zu Kaskade und ID zu ID_WINDOW_CASCADE.

    7. Klicken Sie auf die dritte Schaltfläche und ändern Sie dann Beschriftung zu Nebeneinander und ID zu ID_WINDOW_TILE_HORZ.

  3. Speichern Sie die Änderungen, erstellen Sie anschließend die Anwendung, und führen Sie sie aus.Die Ansicht und Fenster Bereiche angezeigt werden sollen.Klicken Sie auf die Schaltfläche, um sicherzustellen, dass sie ordnungsgemäß funktionieren.

[Abschnitte]

Hinzufügen eines Hilfe-Bereich zum Menüband

Sie können nun zwei Menüelemente zuweisen, die in der Scribble-Anwendung zum Menüband definiert werden, die Schaltflächen und Hilfethemen Info benannt werden.Die Schaltflächen werden in einen neuen Bereich hinzugefügt, der Hilfe benannt ist.

So fügen Sie einen Hilfebereich hinzu

  1. Ziehen Sie aus ToolboxBereich zur Startseite Kategorie.Dann Ziehen Sie zwei Schaltflächen für den Bereich.

  2. Klicken Sie auf den Bereich, dessen Eigenschaften zu ändern.Beschriftung Änderung an Hilfe.

  3. Klicken Sie auf die erste Schaltfläche.Beschriftung Änderung an Hilfethemen und ID zu ID_HELP_FINDER.

  4. Klicken Sie auf die zweite Schaltfläche.Beschriftung Änderung an Über Scribble… und ID zu ID_APP_ABOUT.

  5. Speichern Sie die Änderungen, erstellen Sie anschließend die Anwendung, und führen Sie sie aus.Ein Hilfe Bereich, der zwei Schaltflächen Menüband enthält, sollte angezeigt werden.

    Wichtiger HinweisWichtig

    Wenn Sie auf die Schaltfläche klicken, wird Hilfethemen der Scribble-Anwendung eine komprimierte Datei mit dem Namen der Hilfedatei (.chm your_project_name.chm HTML).Wenn das Projekt nicht benannt Scribble ist, müssen Sie die Hilfedatei auf Ihrem Projektnamens umbenennen.

[Abschnitte]

Hinzufügen eines Stifts-Bereich zum Menüband

Jetzt fügen Sie einen Bereich Zeigt die Schaltflächen hinzu, die Farbe und die Breite des Stifts steuern.Dieser Bereich enthält ein Kontrollkästchen, das die zwischen starken und dünnen Stifte wechselt.Seine Funktionalität ähnelt der des Menüelements Starke Linie in der Scribble-Anwendung.

Die ursprüngliche Scribble-Anwendung können die ausgewählten Stifts Breite des Benutzers aus einem Dialogfeld an, das angezeigt wird, wenn der Benutzer auf Stiftbreiten im Menü klickt.Da die leiste Menüband reichlichen Platz für neue Steuerelemente verfügt, können Sie das Dialogfeld ersetzen, indem Sie die beiden Kombinationsfelder auf dem Menüband verwenden.Ein Kombinationsfeld passt die Breite des dünnen Stifts und die andere Kombinationsfeld passt die Breite des starken Stifts.

Um einen Bereich des Stifts und Kombinationsfelder dem Menüband hinzu

  1. Ziehen Sie aus ToolboxBereich zur Startseite Kategorie.Ziehen Sie dann dem Bereich Kontrollkästchen und zwei Kombinationsfelder.

  2. Klicken Sie auf den Bereich, dessen Eigenschaften zu ändern.Beschriftung Änderung an Stiftes.

  3. Klicken Sie auf das Kontrollkästchen.Beschriftung Änderung an Verwendung dick und ID zu ID_PEN_THICK_OR_THIN.

  4. Klicken Sie auf das erste Kombinationsfeld.Beschriftung Änderung an Verdünnen Sie Stiftes, an ID zu ID_PEN_THIN_WIDTH, an Text zu 2, an Typ zu Ablagen-Liste und Daten zu 1; 2; 3; 4; 5; 6; 7; 8; 9;.

  5. Klicken Sie auf das zweite Kombinationsfeld.Beschriftung Änderung an Starker Stiftes, an ID zu ID_PEN_THICK_WIDTH, an Text zu 5, an Typ zu Ablagen-Liste und Daten zu 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20;.

  6. Die neuen Kombinationsfelder entsprechen nicht auf einen vorhandenen Menüelemente.Daher müssen Sie ein Menüelement für jede Option Stifts erstellt.

    1. Im Fenster Ressourcenansicht öffnen Sie die IDR_SCRIBBTYPE-Menüressource.

    2. Klicken Sie auf Stift, um das Menü zu öffnen.de pKlicken Sie auf Typ, und geben Sie hier Thi&n-Stift ein.

    3. Klicken Sie mit der rechten Maustaste auf den Text, den Sie gerade eingegebenen Eigenschaften um das Fenster zu öffnen und ändern dann die ID-Eigenschaft auf ID_PEN_THIN_WIDTH.

    4. Sie müssen einen Ereignishandler für jedes Menüelement Stifts erstellen.Klicken Sie mit der rechten Maustaste auf das Menüelement, das Sie gerade Thi&n-Stifts und anschließend erstellten Ereignishandler hinzufügen klicken.Ereignishandler-Assistent wird angezeigt.

    5. Im Feld Klassenliste im Assistenten die Option CScribbleDoc und klicken Sie dann auf **Hinzu/Bearb.**Dies stellt einen Ereignishandler, der CScribbleDoc::OnPenThinWidth benannt ist.

    6. Fügen Sie CScribbleDoc::OnPenThinWidth den folgenden Code hinzu.

      // Get a pointer to the ribbon bar
      CMFCRibbonBar* pRibbon = ((CMDIFrameWndEx*) AfxGetMainWnd())->GetRibbonBar();
      ASSERT_VALID(pRibbon);
      // Get a pointer to the Thin Width combo box
      CMFCRibbonComboBox* pThinComboBox = DYNAMIC_DOWNCAST(
         CMFCRibbonComboBox, pRibbon->FindByID(ID_PEN_THIN_WIDTH));
      //Get the selected value
      int nCurSel = pThinComboBox->GetCurSel();
      if (nCurSel >= 0)
      {
         m_nThinWidth = atoi(pThinComboBox->GetItem(nCurSel));
      }
      // Create a new pen using the selected width
      ReplacePen();  
      
  7. Als Nächstes erstellen Sie ein Menüelement und Ereignishandlern für den starken Stift erstellt.

    1. Im Fenster Ressourcenansicht öffnen Sie die IDR_SCRIBBTYPE-Menüressource.

    2. Klicken Sie auf Stift des Stifts für Menüs zu öffnen.Klicken Sie auf Typ, und geben Sie hier Thic&k-Stift ein.

    3. Klicken Sie mit der rechten Maustaste auf den soeben der der Text Eigenschaften erhalten hat, um das Fenster anzuzeigen.Ändern Sie die ID-Eigenschaft auf ID_PEN_THICK_WIDTH.

    4. Klicken Sie mit der rechten Maustaste auf das Menüelement Dicker Stift, das Sie gerade erstellt haben, und klicken Sie dann auf Ereignishandler hinzufügen.Ereignishandler-Assistent wird angezeigt.

    5. Im Feld Klassenliste des Assistenten die Option CScribbleDoc und klicken Sie dann auf **Hinzu/Bearb.**Dies stellt einen Ereignishandler, der CScribbleDoc::OnPenThickWidth benannt ist.

    6. Fügen Sie CScribbleDoc::OnPenThickWidth den folgenden Code hinzu.

      // Get a pointer to the ribbon bar
      CMFCRibbonBar* pRibbon = ((CMDIFrameWndEx *) AfxGetMainWnd())->GetRibbonBar();
      ASSERT_VALID(pRibbon);
      CMFCRibbonComboBox* pThickComboBox = DYNAMIC_DOWNCAST(
         CMFCRibbonComboBox, pRibbon->FindByID(ID_PEN_THICK_WIDTH));
      // Get the selected value
      int nCurSel = pThickComboBox->GetCurSel();
      if (nCurSel >= 0)
      {
         m_nThickWidth = atoi(pThickComboBox->GetItem(nCurSel));
      }
      // Create a new pen using the selected width
      ReplacePen();
      
  8. Speichern Sie die Änderungen, erstellen Sie anschließend die Anwendung, und führen Sie sie aus.Die neue Schaltflächen und Kombinationsfelder sollten angezeigt werden.Test mit unterschiedlichen Stifts zu großen kritzeln.

[Abschnitte]

Eine Farben-Schaltfläche auf Hinzufügen Stifts-Bereich

Als Nächstes fügen Sie ein CMFCRibbonColorButton-Objekt hinzu, das den Benutzer in Farbe kritzeln können.

So fügen Sie eine Schaltfläche Farben hinzufügen im Bereich des Stifts

  1. Bevor Sie die Schaltfläche Farben hinzufügen, erstellen Sie ein Menüelement für die Bindung auf.Im Fenster Ressourcenansicht öffnen Sie die IDR_SCRIBBTYPE-Menüressource.Klicken Sie auf das Menüelement Stift Stiftes, um das Menü zu öffnen.Klicken Sie auf Typ, und geben Sie hier &Color ein.Klicken Sie mit der rechten Maustaste auf den soeben der der Text Eigenschaften erhalten hat, um das Fenster anzuzeigen.Ändern Sie die ID ID_PEN_COLOR.

  2. Fügen Sie nun die Schaltfläche Farben hinzu.Ziehen Sie aus ToolboxSchaltfläche "Farbe" zum Stift Bereich.

  3. Klicken Sie auf die Schaltfläche Farben.Ändern Sie Beschriftung zu Farbe, ID zu ID_PEN_COLOR, EinfachAussehen zu True, Großer Bildindex zu 1 und Geteilter Modus zu False.

  4. Speichern Sie die Änderungen, erstellen Sie anschließend die Anwendung, und führen Sie sie aus.Die neue Farben im Bereich Schaltfläche Stift sollte angezeigt werden.Allerdings kann sie nicht verwendet werden, da sie noch kein Ereignishandler verfügt.Die folgenden Schritte zeigen, wie ein Ereignishandler für die Schaltfläche Farben hinzugefügt wird.

[Abschnitte]

Hinzufügen eines Farben-Member der Dokumentklasse

Da die ursprüngliche Scribble-Anwendung stifte Farben nicht enthält, müssen Sie eine Implementierung dafür schreiben.Um die Stiftfarbe des Dokuments zu speichern, fügen Sie einen neuen Member der Dokumentklasse, CscribbleDoc. hinzu

So erstellen Sie einen Member der Dokumentklasse Farben hinzufügen

  1. In scribdoc.h in der CScribbleDoc-Klasse, suchen Sie den Abschnitt // Attributes.Fügen Sie die folgenden Codezeilen nach der Definition des Datenmembers m_nThickWidth hinzu.

    // Current pen color
    COLORREF   m_penColor;
    
  2. Jedes Dokument enthält eine Liste von schürt, dass der Benutzer bereits angehalten wurde.Jeder Strich wird durch ein CStroke-Objekt definiert.Die CStroke-Klasse enthält keine Informationen über Stiftfarbe.Deshalb müssen Sie die Klasse ändern.In scribdoc.h in der CStroke-Klasse die folgenden Codezeilen nach der Definition des Datenmembers m_nPenWidth hinzu.

    // Pen color for the stroke
    COLORREF   m_penColor;
    
  3. In scribdoc.h fügen Sie einen neuen CStroke-Konstruktor hinzu, dessen Parameter eine Breite und Farbe angeben.Fügen Sie die folgende Codezeile in der CStroke(UINT nPenWidth);-Anweisung hinzu.

    CStroke(UINT nPenWidth, COLORREF penColor);
    
  4. In scribdoc.cpp fügen Sie die Implementierung des neuen Konstruktors CStroke hinzu.Fügen Sie den folgenden Code nach der Implementierung des CStroke::CStroke(UINT nPenWidth)-Konstruktors hinzu.

    // Constructor that uses the document's current width and color
    CStroke::CStroke(UINT nPenWidth, COLORREF penColor)
    {
       m_nPenWidth = nPenWidth;
       m_penColor = penColor;
       m_rectBounding.SetRectEmpty();
    }
    
  5. Ändern Sie die zweite Zeile der CStroke::DrawStroke-Methode wie folgt.

    if (!penStroke.CreatePen(PS_SOLID, m_nPenWidth, m_penColor))
    
  6. Legen Sie die Stiftfarbe für die Dokumentklasse fest.In scribdoc.cpp Fügen Sie die folgenden Zeilen CScribbleDoc::InitDocument, nach der m_nThickWidth = 5;-Anweisung hinzu.

    // default pen color is black
    m_penColor = RGB(0,0,0); 
    
  7. In scribdoc.cpp ändern Sie die erste Zeile der CScribbleDoc::NewStroke-Methode.

    CStroke* pStrokeItem = new CStroke(m_nPenWidth, m_penColor);
    
  8. Ändern Sie die letzte Zeile der CScribbleDoc::ReplacePen-Methode.

    m_penCur.CreatePen(PS_SOLID, m_nPenWidth, m_penColor);
    
  9. Sie haben den m_penColor-Member in einem vorherigen Schritt hinzugefügt.Jetzt erstellen Sie einen Ereignishandler für die Schaltfläche Farben, die den Member festgelegt werden soll.

    1. Im Fenster Ressourcenansicht öffnen Sie die IDR_SCRIBBTYPE-Menüressource.

    2. Klicken Sie mit der rechten Maustaste auf das Menüelement Farbe und klicken Sie auf Ereignishandler hinzufügen….Ereignishandler-Assistent angezeigt wird.

    3. Im Feld Klassenliste im Assistenten die Option CScribbleDoc und klicken Sie dann auf die Schaltfläche Hinzu/Bearb..Dies stellt den Ereignishandler CScribbleDoc::OnPenColor stub.

  10. Ersetzen Sie den Stub für den CScribbleDoc::OnPenColor-Ereignishandler durch folgenden Code.

    void CScribbleDoc::OnPenColor()
    {
    // Change pen color to reflect color button's current selection
    CMFCRibbonBar* pRibbon = ((CMDIFrameWndEx*) AfxGetMainWnd())->GetRibbonBar();
    ASSERT_VALID(pRibbon);
    CMFCRibbonColorButton* pColorBtn = DYNAMIC_DOWNCAST(
       CMFCRibbonColorButton, pRibbon->FindByID(ID_PEN_COLOR));
    m_penColor = pColorBtn->GetColor();
    // Create new pen using the selected color
    ReplacePen();
    }
    
  11. Speichern Sie die Änderungen, erstellen Sie anschließend die Anwendung, und führen Sie sie aus.Sie sollten in der Lage sein, die Schaltfläche Farben und drücken die Farbe des Stifts zu ändern.

[Abschnitte]

Stifte und Speichern von Einstellungen initialisieren

Anschließend initialisieren Sie die Farbe und die Breite der Stifte.Schließlich zeichnung Farben eine Speichern und Laden aus einer Datei.

So ordnen Sie Steuerelemente auf dem Menüband leiste initialisieren

  1. Initialisieren Sie die Stifte Menüband auf der leiste.

    Fügen Sie den folgenden Code scribdoc.cpp, in der CScribbleDoc::InitDocument-Methode, nach der m_sizeDoc = CSize(200,200)-Anweisung hinzu.

    // Reset the ribbon UI to its initial values
    CMFCRibbonBar* pRibbon = 
       ((CMDIFrameWndEx*) AfxGetMainWnd())->GetRibbonBar();
    ASSERT_VALID(pRibbon);
    CMFCRibbonColorButton* pColorBtn = DYNAMIC_DOWNCAST(
       CMFCRibbonColorButton, 
       pRibbon->FindByID(ID_PEN_COLOR));
    // Set ColorButton to black
    pColorBtn->SetColor(RGB(0,0,0));  
    CMFCRibbonComboBox* pThinComboBox = DYNAMIC_DOWNCAST(
       CMFCRibbonComboBox, 
       pRibbon->FindByID(ID_PEN_THIN_WIDTH));
    // Set Thin pen combobox to 2
    pThinComboBox->SelectItem(1); 
    CMFCRibbonComboBox* pThickComboBox = DYNAMIC_DOWNCAST(
       CMFCRibbonComboBox, 
       pRibbon->FindByID(ID_PEN_THICK_WIDTH));
    // Set Thick pen combobox to 5
    pThickComboBox->SelectItem(0);
    
  2. Speichern Sie eine Farbe für eine Datei zeichnet.Fügen Sie die folgende Anweisung scribdoc.cpp, in der CStroke::Serialize-Methode, nach der ar << (WORD)m_nPenWidth;-Anweisung hinzu.

    ar << (COLORREF)m_penColor;
    
  3. Schließlich laden Sie eine Farbe zeichnung aus einer Datei.Fügen Sie die folgende Codezeile, in der CStroke::Serialize-Methode, nach der m_nPenWidth = w;-Anweisung hinzu.

    ar >> m_penColor;
    
  4. Jetzt kritzeln Sie in der angegebenen Farbe und speichern Sie die Zeichnung an eine Datei.

[Abschnitte]

Schlussfolgerung

Sie haben die Anwendung MFC Scribble aktualisiert.Verwenden Sie diese exemplarische Vorgehensweise als Leitfaden, wenn Sie vorhandene Anwendungen ändern.

Siehe auch

Aufgaben

Exemplarische Vorgehensweise: Aktualisieren der MFC-Scribble-Anwendung (Teil 1)

Weitere Ressourcen

Exemplarische Vorgehensweisen (MFC)