Wskazówki: aktualizowanie aplikacji bazgrołów MFC (część 2)
Część 1 tego przewodnika pokazała, jak dodać wstążkę Fluent pakietu Office do klasycznej aplikacji Scribble. W tej części pokazano, jak dodać panele wstążki i kontrolki, których użytkownicy mogą używać zamiast menu i poleceń.
Wymagania wstępne
Sekcje
Ta część przewodnika zawiera następujące sekcje:
Dodawanie nowych paneli do wstążki
W tych krokach pokazano, jak dodać panel Widok zawierający dwa pola wyboru, które kontrolują widoczność paska narzędzi i paska stanu, a także panel okna , który zawiera pionowo zorientowany przycisk podziału, który steruje tworzeniem i rozmieszczeniem okien interfejsu wielu dokumentów (MDI).
Aby dodać panel Widok i panel okna do paska wstążki
Utwórz panel o nazwie
View
, który zawiera dwa pola wyboru, które przełączają pasek stanu i pasek narzędzi.Z przybornika przeciągnij panel do kategorii Narzędzia główne. Następnie przeciągnij dwa pola wyboru do panelu.
Kliknij panel, aby zmodyfikować jego właściwości. Zmień podpis na
View
.Kliknij pierwsze pole wyboru, aby zmodyfikować jego właściwości. Zmień identyfikator na
ID_VIEW_TOOLBAR
i Podpis naToolbar
.Kliknij drugie pole wyboru, aby zmodyfikować jego właściwości. Zmień identyfikator na
ID_VIEW_STATUS_BAR
i Podpis naStatus Bar
.
Utwórz panel o nazwie
Window
z przyciskiem podziału. Gdy użytkownik kliknie przycisk podziału, w menu skrótów zostaną wyświetlone trzy polecenia, które są już zdefiniowane w aplikacji Scribble.Z przybornika przeciągnij panel do kategorii Narzędzia główne. Następnie przeciągnij przycisk do panelu.
Kliknij panel, aby zmodyfikować jego właściwości. Zmień podpis na
Window
.Kliknij przycisk . Zmień wartość Caption na , Keys to
w
Windows
, Large Image Index na , i Split Mode na1
False
. Następnie kliknij wielokropek (...) obok pozycji Elementy menu, aby otworzyć okno dialogowe Edytor elementów.Kliknij przycisk Dodaj trzy razy, aby dodać trzy przyciski.
Kliknij pierwszy przycisk, a następnie zmień pozycję Podpis na
New Window
, i identyfikator naID_WINDOW_NEW
.Kliknij drugi przycisk, a następnie zmień pozycję Podpis na
Cascade
, i identyfikator naID_WINDOW_CASCADE
.Kliknij trzeci przycisk, a następnie zmień pozycję Podpis na
Tile
, i identyfikator naID_WINDOW_TILE_HORZ
.
Zapisz zmiany, a następnie skompiluj i uruchom aplikację. Powinny być wyświetlane panele Widok i Okno . Kliknij przyciski, aby potwierdzić, że działają prawidłowo.
Dodawanie panelu Pomocy do wstążki
Teraz możesz przypisać dwa elementy menu zdefiniowane w aplikacji Scribble do przycisków wstążki o nazwie Tematy pomocy i Informacje o scribble. Przyciski są dodawane do nowego panelu o nazwie Pomoc.
Aby dodać panel Pomoc
Z przybornika przeciągnij panel do kategorii Narzędzia główne. Następnie przeciągnij dwa przyciski do panelu.
Kliknij panel, aby zmodyfikować jego właściwości. Zmień podpis na
Help
.Kliknij pierwszy przycisk. Zmień wartość Podpis na
Help Topics
, i identyfikator naID_HELP_FINDER
.Kliknij drugi przycisk. Zmień wartość Podpis na
About Scribble...
, i identyfikator naID_APP_ABOUT
.Zapisz zmiany, a następnie skompiluj i uruchom aplikację. Powinien zostać wyświetlony panel Pomoc zawierający dwa przyciski wstążki.
Ważne
Po kliknięciu przycisku Tematy pomocy aplikacja Scribble otwiera skompresowany plik pomocy HTML (.chm) o nazwie your_project_name.chm. W związku z tym, jeśli projekt nie ma nazwy Scribble, musisz zmienić nazwę pliku pomocy na nazwę projektu.
Dodawanie panelu pióra do wstążki
Teraz dodaj panel do wyświetlania przycisków sterujących grubością i kolorem pióra. Ten panel zawiera pole wyboru, które przełącza się między grubymi i cienkimi piórami. Jego funkcjonalność przypomina element menu Gruba linia w aplikacji Scribble.
Oryginalna aplikacja Scribble umożliwia użytkownikowi wybranie szerokości pióra z okna dialogowego wyświetlanego po kliknięciu przez użytkownika szerokości pióra w menu. Ponieważ pasek wstążki ma miejsce na nowe kontrolki, możesz zamienić okno dialogowe przy użyciu dwóch pól kombi na wstążce. Jedno pole kombi dostosowuje szerokość cienkiego pióra, a drugie pole kombi dostosowuje szerokość grubego pióra.
Aby dodać panel pióra i pola kombi do wstążki
Z przybornika przeciągnij panel do kategorii Narzędzia główne. Następnie przeciągnij pole wyboru i dwa pola kombi do panelu.
Kliknij panel, aby zmodyfikować jego właściwości. Zmień podpis na
Pen
.Kliknij pole wyboru. Zmień wartość Podpis na
Use Thick
, i identyfikator naID_PEN_THICK_OR_THIN
.Kliknij pierwsze pole kombi. Zmień wartość Caption na , ID na
ID_PEN_THIN_WIDTH
Thin Pen
, Wpisz naDrop List
, Dane na1;2;3;4;5;6;7;8;9;
, i Text na2
.Kliknij drugie pole kombi. Zmień wartość Caption na , ID na
ID_PEN_THICK_WIDTH
Thick Pen
, Wpisz naDrop List
, Dane na5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;
, i Text na5
.Nowe pola kombi nie odpowiadają żadnym istniejącym elementom menu, dlatego należy utworzyć element menu dla każdej opcji pióra.
W oknie Widok zasobu otwórz zasób menu IDR_SCRIBBTYPE.
Kliknij pozycję Pióro, aby otworzyć menu pióra . Następnie kliknij pozycję Wpisz tutaj i wpisz
Thi&n Pen
.Kliknij prawym przyciskiem myszy wpisany tekst, aby otworzyć okno Właściwości , a następnie zmień właściwość ID na
ID_PEN_THIN_WIDTH
.Utwórz procedurę obsługi zdarzeń dla każdego elementu menu pióra. Kliknij prawym przyciskiem myszy utworzony element menu Thi&n Pen , a następnie kliknij polecenie Dodaj program obsługi zdarzeń. Zostanie wyświetlony Kreator obsługi zdarzeń.
W polu Lista klas w kreatorze wybierz pozycję CScribbleDoc, a następnie kliknij pozycję Dodaj i edytuj. Polecenie tworzy procedurę obsługi zdarzeń o nazwie
CScribbleDoc::OnPenThinWidth
.Dodaj następujący kod do pliku
CScribbleDoc::OnPenThinWidth
.// 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(CStringA(pThinComboBox->GetItem(nCurSel))); } // Create a new pen using the selected width ReplacePen();
Następnie utwórz element menu i programy obsługi zdarzeń dla grubego pióra.
W oknie Widok zasobu otwórz zasób menu IDR_SCRIBBTYPE.
Kliknij pozycję Pióro, aby otworzyć menu pióra . Następnie kliknij pozycję Wpisz tutaj i wpisz
Thic&k Pen
.Kliknij prawym przyciskiem myszy wpisany tekst, aby wyświetlić okno Właściwości . Zmień właściwość ID na
ID_PEN_THICK_WIDTH
.Kliknij prawym przyciskiem myszy utworzony element menu Gruby pióro , a następnie kliknij polecenie Dodaj procedurę obsługi zdarzeń. Zostanie wyświetlony Kreator obsługi zdarzeń.
W polu Lista klas kreatora wybierz pozycję CScribbleDoc, a następnie kliknij pozycję Dodaj i edytuj. Polecenie tworzy procedurę obsługi zdarzeń o nazwie
CScribbleDoc::OnPenThickWidth
.Dodaj następujący kod do pliku
CScribbleDoc::OnPenThickWidth
.// 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(CStringA(pThickComboBox->GetItem(nCurSel))); } // Create a new pen using the selected width ReplacePen();
Zapisz zmiany, a następnie skompiluj i uruchom aplikację. Powinny być wyświetlane nowe przyciski i pola kombi. Spróbuj użyć różnych szerokości pióra do bazgrołowania.
Dodawanie przycisku koloru do panelu pióra
Następnie dodaj obiekt CMFCRibbonColorButton , który umożliwia użytkownikowi bazgrołowanie w kolorze.
Aby dodać przycisk koloru do panelu Pióro
Przed dodaniem przycisku koloru utwórz dla niego element menu. W oknie Widok zasobu otwórz zasób menu IDR_SCRIBBTYPE. Kliknij element menu Pióro, aby otworzyć menu pióra. Następnie kliknij pozycję Wpisz tutaj i wpisz
&Color
. Kliknij prawym przyciskiem myszy wpisany tekst, aby wyświetlić okno Właściwości . Zmień identyfikator naID_PEN_COLOR
.Teraz dodaj przycisk koloru. Z przybornika przeciągnij przycisk Color (Kolor) do panelu Pióro.
Kliknij przycisk koloru. Zmień wartość Caption na , ID na
ID_PEN_COLOR
Color
, Simple Look na , Large Image Index naTrue
, i Split Mode na1
False
.Zapisz zmiany, a następnie skompiluj i uruchom aplikację. Nowy przycisk koloru powinien być wyświetlany na panelu Pióro . Nie można go jednak użyć, ponieważ nie ma jeszcze programu obsługi zdarzeń. W następnych krokach pokazano, jak dodać procedurę obsługi zdarzeń dla przycisku koloru.
Dodawanie elementu członkowskiego koloru do klasy dokumentu
Ponieważ oryginalna aplikacja Scribble nie ma piór kolorów, musisz napisać dla nich implementację. Aby zapisać kolor pióra dokumentu, dodaj nowy element członkowski do klasy dokumentów , CscribbleDoc
.
Aby dodać składową koloru do klasy dokumentów
W pliku scribdoc.h w
CScribbleDoc
klasie znajdź sekcję// Attributes
. Dodaj następujące wiersze kodu po definicjim_nThickWidth
elementu członkowskiego danych.// Current pen color COLORREF m_penColor;
Każdy dokument zawiera listę podsyci, które użytkownik już narysował. Każdy pociągnięcie jest definiowane
CStroke
przez obiekt. KlasaCStroke
nie zawiera informacji o kolorze pióra, więc należy zmodyfikować klasę. W pliku scribdoc.h wCStroke
klasie dodaj następujące wiersze kodu po definicji składowejm_nPenWidth
danych.// Pen color for the stroke COLORREF m_penColor;
W pliku scribdoc.h dodaj nowy
CStroke
konstruktor, którego parametry określają szerokość i kolor. Dodaj następujący wiersz kodu po instrukcjiCStroke(UINT nPenWidth);
.CStroke(UINT nPenWidth, COLORREF penColor);
W pliku scribdoc.cpp dodaj implementację nowego
CStroke
konstruktora. Dodaj następujący kod po implementacji konstruktoraCStroke::CStroke(UINT nPenWidth)
.// 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(); }
Zmień drugi wiersz
CStroke::DrawStroke
metody w następujący sposób.if (!penStroke.CreatePen(PS_SOLID, m_nPenWidth, m_penColor))
Ustaw domyślny kolor pióra dla klasy dokumentu. W pliku scribdoc.cpp dodaj następujące wiersze do
CScribbleDoc::InitDocument
, po instrukcjim_nThickWidth = 5;
.// default pen color is black m_penColor = RGB(0, 0, 0);
W pliku scribdoc.cpp zmień pierwszy wiersz
CScribbleDoc::NewStroke
metody na następujący.CStroke* pStrokeItem = new CStroke(m_nPenWidth, m_penColor);
Zmień ostatni wiersz
CScribbleDoc::ReplacePen
metody na następujący.m_penCur.CreatePen(PS_SOLID, m_nPenWidth, m_penColor);
Element członkowski
m_penColor
został dodany w poprzednim kroku. Teraz utwórz procedurę obsługi zdarzeń dla przycisku koloru, który ustawia element członkowski.W oknie Widok zasobu otwórz zasób menu IDR_SCRIBBTYPE.
Kliknij prawym przyciskiem myszy element menu Kolor , a następnie kliknij polecenie Dodaj program obsługi zdarzeń. Zostanie wyświetlony Kreator obsługi zdarzeń.
W polu Lista klas w kreatorze wybierz pozycję CScribbleDoc, a następnie kliknij przycisk Dodaj i edytuj. Polecenie tworzy wycinkę
CScribbleDoc::OnPenColor
programu obsługi zdarzeń.
Zastąp wycinkę
CScribbleDoc::OnPenColor
programu obsługi zdarzeń następującym kodem.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(); }
Zapisz zmiany, a następnie skompiluj i uruchom aplikację. Teraz możesz nacisnąć przycisk koloru i zmienić kolor pióra.
Inicjowanie piór i zapisywanie preferencji
Następnie zainicjuj kolor i szerokość piór. Na koniec zapisz i załaduj rysunek koloru z pliku.
Aby zainicjować kontrolki na pasku wstążki
Zainicjuj pióra na pasku wstążki.
Dodaj następujący kod do pliku scribdoc.cpp w metodzie
CScribbleDoc::InitDocument
po instrukcjim_sizeDoc = CSize(200,200)
.// 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);
Zapisz rysunek koloru w pliku. Dodaj następującą instrukcję do pliku scribdoc.cpp w metodzie
CStroke::Serialize
po instrukcjiar << (WORD)m_nPenWidth;
.ar << (COLORREF)m_penColor;
Na koniec załaduj rysunek koloru z pliku. Dodaj następujący wiersz kodu w metodzie
CStroke::Serialize
po instrukcjim_nPenWidth = w;
.ar >> m_penColor;
Teraz przeszukuj kolor i zapisz rysunek w pliku.
Podsumowanie
Zaktualizowano aplikację MFC Scribble. Użyj tego przewodnika jako przewodnika podczas modyfikowania istniejących aplikacji.
Zobacz też
Przewodniki
Przewodnik: aktualizowanie aplikacji bazgrołów MFC (część 1)
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla