Procedura dettagliata: aggiornamento dell'applicazione MFC Scribble (parte 2)
La parte 1 di questa procedura dettagliata ha illustrato come aggiungere una barra multifunzione fluente di Office all'applicazione classica Scribble. Questa parte illustra come aggiungere pannelli e controlli della barra multifunzione che gli utenti possono usare invece di menu e comandi.
Prerequisiti
Sezioni
In questa parte della procedura dettagliata sono incluse le seguenti sezioni:
Aggiunta di nuovi pannelli alla barra multifunzione
Questi passaggi illustrano come aggiungere un pannello Visualizza contenente due caselle di controllo che controllano la visibilità della barra degli strumenti e della barra di stato, nonché un pannello Finestra che contiene un pulsante di divisione orientato verticalmente che controlla la creazione e la disposizione delle finestre MDI (Multiple-Document Interface).
Per aggiungere un pannello Visualizza e un pannello Finestra alla barra multifunzione
Creare un pannello denominato
View
, con due caselle di controllo che attivano o disattivano la barra di stato e la barra degli strumenti.Dalla casella degli strumenti trascinare un pannello nella categoria Home. Trascinare quindi due caselle di controllo nel pannello.
Fare clic sul pannello per modificarne le proprietà. Modificare Caption (Didascalia) in
View
.Fare clic sulla prima casella di controllo per modificarne le proprietà. Modificare l'ID in
ID_VIEW_TOOLBAR
e Didascalia inToolbar
.Fare clic sulla seconda casella di controllo per modificarne le proprietà. Modificare l'ID in
ID_VIEW_STATUS_BAR
e Didascalia inStatus Bar
.
Creare un pannello denominato
Window
con un pulsante di divisione. Quando un utente fa clic sul pulsante di divisione, un menu di scelta rapida visualizza tre comandi già definiti nell'applicazione Scribble.Dalla casella degli strumenti trascinare un pannello nella categoria Home. Trascinare quindi un pulsante nel pannello.
Fare clic sul pannello per modificarne le proprietà. Modificare Caption (Didascalia) in
Window
.Fare clic sul pulsante . Impostare Caption su
Windows
, Keys to , Large Image Index (Indice immagine di grandi dimensioni) suw
1
e Split Mode (Modalità di divisione) suFalse
. Fare quindi clic sui puntini di sospensione (...) accanto a Voci di menu per aprire la finestra di dialogo Editor elementi.Fare clic su Aggiungi tre volte per aggiungere tre pulsanti.
Fare clic sul primo pulsante e quindi impostare Caption su
New Window
e ID suID_WINDOW_NEW
.Fare clic sul secondo pulsante e quindi impostare Caption su
Cascade
e ID suID_WINDOW_CASCADE
.Fare clic sul terzo pulsante e quindi impostare Caption su
Tile
e ID suID_WINDOW_TILE_HORZ
.
Salvare le modifiche, quindi compilare ed eseguire l'applicazione. I pannelli Visualizza e Finestra devono essere visualizzati. Fare clic sui pulsanti per verificare che funzionino correttamente.
Aggiunta di un pannello della Guida alla barra multifunzione
A questo punto, è possibile assegnare due voci di menu definite nell'applicazione Scribble ai pulsanti della barra multifunzione denominati Argomenti della Guida e Informazioni su Scribble. I pulsanti vengono aggiunti a un nuovo pannello denominato Guida.
Per aggiungere un pannello della Guida
Dalla casella degli strumenti trascinare un pannello nella categoria Home. Trascinare quindi due pulsanti nel pannello.
Fare clic sul pannello per modificarne le proprietà. Modificare Caption (Didascalia) in
Help
.Fare clic sul primo pulsante. Modificare Caption (Didascalia ) in
Help Topics
e ID inID_HELP_FINDER
.Fare clic sul secondo pulsante. Modificare Caption (Didascalia ) in
About Scribble...
e ID inID_APP_ABOUT
.Salvare le modifiche, quindi compilare ed eseguire l'applicazione. Verrà visualizzato un pannello della Guida che contiene due pulsanti della barra multifunzione.
Importante
Quando si fa clic sul pulsante Argomenti della Guida, l'applicazione Scribble apre un file della Guida HTML compresso (con estensione chm) denominato your_project_name.chm. Di conseguenza, se il progetto non è denominato Scribble, è necessario rinominare il file della Guida con il nome del progetto.
Aggiunta di un pannello penna alla barra multifunzione
Aggiungere ora un pannello per visualizzare i pulsanti che controllano lo spessore e il colore della penna. Questo pannello contiene una casella di controllo che alterna le penne spesse e sottili. La sua funzionalità è simile a quella della voce di menu Thick Line nell'applicazione Scribble.
L'applicazione originale Scribble consente all'utente di selezionare la larghezza della penna da una finestra di dialogo visualizzata quando l'utente fa clic su Larghezza penna nel menu. Poiché la barra multifunzione dispone di spazio sufficiente per i nuovi controlli, è possibile sostituire la finestra di dialogo usando due caselle combinate sulla barra multifunzione. Una casella combinata regola la larghezza della penna sottile e l'altra casella combinata regola la larghezza della penna spessa.
Per aggiungere un pannello Penna e caselle combinate alla barra multifunzione
Dalla casella degli strumenti trascinare un pannello nella categoria Home. Trascinare quindi una casella di controllo e due caselle combinate nel pannello.
Fare clic sul pannello per modificarne le proprietà. Modificare Caption (Didascalia) in
Pen
.Fare clic sulla casella di controllo. Modificare Caption (Didascalia ) in
Use Thick
e ID inID_PEN_THICK_OR_THIN
.Fare clic sulla prima casella combinata. Modificare Didascalia in , ID in
ID_PEN_THIN_WIDTH
Thin Pen
, digitareDrop List
in , dati in1;2;3;4;5;6;7;8;9;
e testo in2
.Fare clic sulla seconda casella combinata. Modificare Didascalia in , ID in
ID_PEN_THICK_WIDTH
Thick Pen
, digitareDrop List
in , dati in5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;
e testo in5
.Le nuove caselle combinate non corrispondono ad alcuna voce di menu esistente, quindi è necessario creare una voce di menu per ogni opzione penna.
Nella finestra Visualizzazione risorse aprire la risorsa di menu IDR_SCRIBBTYPE.
Fare clic su Penna per aprire il menu della penna. Fare quindi clic su Digitare qui e digitare
Thi&n Pen
.Fare clic con il pulsante destro del mouse sul testo digitato per aprire la finestra Proprietà e quindi modificare la proprietà ID in
ID_PEN_THIN_WIDTH
.Creare un gestore eventi per ogni voce di menu della penna. Fare clic con il pulsante destro del mouse sulla voce di menu Thi&n Pen creata e quindi scegliere Aggiungi gestore eventi. Viene visualizzata la Creazione guidata gestore eventi.
Nella casella di riepilogo Classe della procedura guidata selezionare CScribbleDoc e quindi fare clic su Aggiungi e modifica. Il comando crea un gestore eventi denominato
CScribbleDoc::OnPenThinWidth
.Aggiungere il codice seguente a
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();
Creare quindi una voce di menu e i gestori eventi per la penna spessa.
Nella finestra Visualizzazione risorse aprire la risorsa di menu IDR_SCRIBBTYPE.
Fare clic su Penna per aprire il menu della penna. Fare quindi clic su Digitare qui e digitare
Thic&k Pen
.Fare clic con il pulsante destro del mouse sul testo digitato per visualizzare la finestra Proprietà . Modificare la proprietà ID in
ID_PEN_THICK_WIDTH
.Fare clic con il pulsante destro del mouse sulla voce di menu Thick Pen creata e quindi scegliere Aggiungi gestore eventi. Viene visualizzata la Creazione guidata gestore eventi.
Nella casella di riepilogo Classe della procedura guidata selezionare CScribbleDoc e quindi fare clic su Aggiungi e modifica. Il comando crea un gestore eventi denominato
CScribbleDoc::OnPenThickWidth
.Aggiungere il codice seguente a
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();
Salvare le modifiche, quindi compilare ed eseguire l'applicazione. Verranno visualizzati nuovi pulsanti e caselle combinate. Provare a usare larghezze di penna diverse per scarabocchiare.
Aggiunta di un pulsante colore al pannello della penna
Aggiungere quindi un oggetto CMFCRibbonColorButton che consente all'utente di colorarsi.
Per aggiungere un pulsante colore al pannello Penna
Prima di aggiungere il pulsante colore, crearne una voce di menu. Nella finestra Visualizzazione risorse aprire la risorsa di menu IDR_SCRIBBTYPE. Fare clic sulla voce di menu Penna per aprire il menu della penna. Fare quindi clic su Digitare qui e digitare
&Color
. Fare clic con il pulsante destro del mouse sul testo digitato per visualizzare la finestra Proprietà . Modificare l'ID inID_PEN_COLOR
.Aggiungere ora il pulsante colore. Dalla casella degli strumenti trascinare un pulsante colore nel pannello Penna.
Fare clic sul pulsante colore. Impostare Caption su
Color
, ID suID_PEN_COLOR
, Simple Look (Aspetto semplice) su , Large Image Index (True
Indice1
immagine di grandi dimensioni) su e Split Mode (Modalità di divisione) suFalse
.Salvare le modifiche, quindi compilare ed eseguire l'applicazione. Il nuovo pulsante colore deve essere visualizzato nel pannello Penna . Tuttavia, non può essere usato perché non ha ancora un gestore eventi. I passaggi successivi illustrano come aggiungere un gestore eventi per il pulsante colore.
Aggiunta di un membro color alla classe Document
Poiché l'applicazione originale Scribble non dispone di penne a colori, è necessario scrivere un'implementazione per tali penne. Per archiviare il colore della penna del documento, aggiungere un nuovo membro alla classe del documento, CscribbleDoc
.
Per aggiungere un membro colore alla classe document
Nella classe scribdoc.h
CScribbleDoc
trovare la// Attributes
sezione . Aggiungere le righe di codice seguenti dopo la definizione delm_nThickWidth
membro dati.// Current pen color COLORREF m_penColor;
Ogni documento contiene un elenco di stoke già disegnati dall'utente. Ogni tratto è definito da un
CStroke
oggetto . LaCStroke
classe non include informazioni sul colore della penna, quindi è necessario modificare la classe . Nella classe scribdoc.hCStroke
aggiungere le righe di codice seguenti dopo la definizione delm_nPenWidth
membro dati.// Pen color for the stroke COLORREF m_penColor;
In scribdoc.h aggiungere un nuovo
CStroke
costruttore i cui parametri specificano una larghezza e un colore. Aggiungere la riga di codice seguente dopo l'istruzioneCStroke(UINT nPenWidth);
.CStroke(UINT nPenWidth, COLORREF penColor);
In scribdoc.cpp aggiungere l'implementazione del nuovo
CStroke
costruttore. Aggiungere il codice seguente dopo l'implementazione delCStroke::CStroke(UINT nPenWidth)
costruttore.// 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(); }
Modificare la seconda riga del
CStroke::DrawStroke
metodo come indicato di seguito.if (!penStroke.CreatePen(PS_SOLID, m_nPenWidth, m_penColor))
Impostare il colore predefinito della penna per la classe documento. In scribdoc.cpp aggiungere le righe seguenti a
CScribbleDoc::InitDocument
, dopo l'istruzionem_nThickWidth = 5;
.// default pen color is black m_penColor = RGB(0, 0, 0);
In scribdoc.cpp modificare la prima riga del
CScribbleDoc::NewStroke
metodo come segue.CStroke* pStrokeItem = new CStroke(m_nPenWidth, m_penColor);
Modificare l'ultima riga del
CScribbleDoc::ReplacePen
metodo come segue.m_penCur.CreatePen(PS_SOLID, m_nPenWidth, m_penColor);
Il membro è stato aggiunto
m_penColor
in un passaggio precedente. Creare ora un gestore eventi per il pulsante colore che imposta il membro.Nella finestra Visualizzazione risorse aprire la risorsa di menu IDR_SCRIBBTYPE.
Fare clic con il pulsante destro del mouse sulla voce di menu Colore e scegliere Aggiungi gestore eventi. Viene visualizzata la Creazione guidata gestore eventi.
Nella casella di riepilogo Classe della procedura guidata selezionare CScribbleDoc e quindi fare clic sul pulsante Aggiungi e modifica. Il comando crea lo stub del
CScribbleDoc::OnPenColor
gestore eventi.
Sostituire lo stub per il
CScribbleDoc::OnPenColor
gestore eventi con il codice seguente.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(); }
Salvare i cambiamenti, quindi compilare ed eseguire l'applicazione. È ora possibile premere il pulsante colore e modificare il colore della penna.
Inizializzazione delle penne e salvataggio delle preferenze
Inizializzare quindi il colore e la larghezza delle penne. Infine, salvare e caricare un disegno a colori da un file.
Per inizializzare i controlli sulla barra multifunzione
Inizializzare le penne sulla barra multifunzione.
Aggiungere il codice seguente a scribdoc.cpp, nel
CScribbleDoc::InitDocument
metodo , dopo l'istruzionem_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);
Salvare un disegno a colori in un file. Aggiungere l'istruzione seguente a scribdoc.cpp, nel
CStroke::Serialize
metodo , dopo l'istruzionear << (WORD)m_nPenWidth;
.ar << (COLORREF)m_penColor;
Caricare infine un disegno a colori da un file. Aggiungere la riga di codice seguente, nel
CStroke::Serialize
metodo , dopo l'istruzionem_nPenWidth = w;
.ar >> m_penColor;
Ora scarabocchiare a colori e salvare il disegno in un file.
Conclusione
L'applicazione MFC Scribble è stata aggiornata. Usare questa procedura dettagliata come guida quando si modificano le applicazioni esistenti.
Vedi anche
Procedure dettagliate
Procedura dettagliata: aggiornamento dell'applicazione MFC Scribble (parte 1)