Esempio CTRBARS: illustrazione di barre di controllo personalizzate
Aggiornamento: novembre 2007
Nell'esempio CTRLBARS viene illustrata un'ampia varietà di opzioni per la personalizzazione delle barre di controllo:
Più barre di controllo in una finestra cornice, attivazione e disattivazione delle barre di controllo e ridisposizione dinamica dei controlli lungo il bordo della finestra cornice. Alle barre di controllo viene allocata una parte dello spazio della finestra cornice in base al relativo ordine Z, che inizialmente rappresenta l'ordine in cui sono create (vedere CMainFrame::OnCreate). L'ordine Z della barra della finestra di dialogo viene modificato con la funzione CWnd::SetWindowPos. Una barra di controllo viene nascosta o visualizzata utilizzando CWnd::ShowWindow. Dopo che in CTRLBARS è stato modificato l'ordine Z oppure è stata nascosta o visualizzata una barra di controllo, viene chiamata CFrameWnd::RecalcLayout in modo che l'area della finestra venga nuovamente allocata alle rimanenti barre di controllo visibili.
Barre degli strumenti personalizzate, ridisposizione dinamica dei pulsanti sulla barra degli strumenti e aggiunta di controlli, ad esempio una casella combinata, ad una barra degli strumenti. In CTRLBARS vengono illustrati due metodi di personalizzazione di una barra degli strumenti. Nella prima barra degli strumenti, chiamata Tool Bar, viene modificata la disposizione dei pulsanti per passare da una barra ridotta (5 pulsanti) a una lunga (10 pulsanti). Per ciascun pulsante, CTRLBARS chiama CToolBar::SetButtonInfo per eseguire il mapping del pulsante a una posizione di affiancamento sulla bitmap della barra degli strumenti e a un'identificazione comando. Nella seconda barra degli strumenti, chiamata Style Bar, viene eseguita la sostituzione di un pulsante della barra degli strumenti (o separatore) con un controllo, in questo esempio una casella combinata. CMainFrame::CreateStyleBar crea un separatore di barra degli strumenti con una larghezza di 100 pixel. Quindi crea la casella combinata (IDW_COMBO) come un figlio della barra degli strumenti e imposta la posizione della casella combinata in modo da utilizzare lo spazio allocato per il separatore.
Barra di stato personalizzata, indicatori personalizzati e invio di testo alla barra dei messaggi. Per le barre di stato, il framework aggiorna automaticamente un indicatore CAP LOCK, NUM LOCK o SCROLL LOCK se si specifica, ad esempio, ID_INDICATOR_CAPS come una delle identificazioni passate alla matrice indicators[ ] in CStatusBar::SetIndicators. In CTRLBARS viene illustrata l'estensione degli indicatori della barra di stato standard con lo stato OVR (overstrike), attivato e disattivato con il tasto INS. A tale scopo è necessario un gestore messaggi per il comando ID_TOGGLE_INSERT (mappato al tasto VK_INSERT) e una stringa di risorsa (ID_INDICATOR_OVR) per il testo "OVR" da visualizzare quando la modalità di sovrascrittura è attiva. L'identificazione di risorsa ID_INDICATOR_OVR è una costante MFC predefinita.
Barra della finestra di dialogo, ovvero una barra di controllo il cui layout è definito da un modello di risorsa finestra di dialogo. Analogamente a tutte le barre di controllo, le notifiche provenienti dai controlli della barra della finestra di dialogo vengono inviate al proprietario della barra, ovvero la finestra cornice principale. CMainFrame::OnSelChangePalette, ad esempio, è il gestore della notifica CBN_SELCHANGE proveniente dal controllo casella combinata in una barra della finestra di dialogo. CMainFrame dispone anche di gestori per due delle tre caselle di controllo Hide/Show (Styles e Palette). Per la terza casella di controllo, Hide/Show Toolbar, non è necessario definire alcun gestore poiché il framework fornisce il gestore standard per ID_VIEW_TOOLBAR.
Tavolozza degli strumenti mobile, che si comporta come una barra degli strumenti, ma visualizza una matrice bidimensionale di pulsanti di strumenti e può essere spostata come una finestra non modale al di sopra della finestra cornice del proprietario. La tavolozza degli strumenti mobile viene implementata in una classe riutilizzabile, CPaletteBar, derivata da CToolBar. La derivazione da CToolBar fornisce a CPaletteBar il comportamento dei pulsanti della barra degli strumenti. Il comportamento specifico della tavolozza implementata in CPaletteBar include:
Stile finestra mobile (WS_POPUP).
Disposizione bidimensionale dei pulsanti degli strumenti in righe e colonne: creazione, disegno e hit testing di pulsanti.
Barra del titolo sottile (senza testo).
Tavolozza mobile che è possibile spostare mediante un rettangolo di rilevamento.
In CTRLBARS viene illustrato anche l'utilizzo di ON_COMMAND_EX e ON_UPDATE_COMMAND_UI_RANGE. Numerose opzioni di personalizzazione delle barre di controllo illustrate in CTRLBARS vengono trattate nella Nota tecnica 31.
Nota sulla sicurezza: |
---|
Questo esempio di codice viene fornito solo a scopo dimostrativo e non deve essere utilizzato in applicazioni o siti Web, poiché potrebbe non implementare le tecniche migliori a livello di sicurezza. Microsoft esclude ogni responsabilità per danni diretti o indiretti derivanti dall'utilizzo dell'esempio di codice per scopi diversi da quelli previsti. |
Per ottenere gli esempi e le istruzioni per l'installazione:
In Visual Studio scegliere Esempi dal menu ?.
Per ulteriori informazioni, vedere Individuazione dei file di esempio.
La versione più recente e l'elenco completo degli esempi sono disponibili in linea alla pagina Visual Studio 2008 Samples.
È anche possibile trovare gli esempi sul disco rigido del computer. Per impostazione predefinita, gli esempi e il file Leggimi vengono copiati in una cartella nel percorso \Programmi\Visual Studio 9.0\Samples\. Per le versioni Express di Visual Studio, tutti gli esempi sono disponibili in linea.
Generazione ed esecuzione dell'esempio
Per generare ed eseguire l'esempio CTRLBARS
Aprire il file di soluzione Ctrlbars.sln.
Scegliere Genera dal menu Genera.
Scegliere Avvia senza eseguire debug dal menu Debug.
La prima volta che si esegue CTRLBARS, tutti i controlli sono visibili.
Una barra degli strumenti con 5 pulsanti si trova immediatamente sotto la barra dei menu. Il primo pulsante (freccia verso l'alto) modifica la disposizione dei pulsanti e consente di passare da una barra ridotta (5 pulsanti) a una lunga (10 pulsanti). I pulsanti sono sempre inattivi, eccetto il primo pulsante Short/Long e il pulsante Help, che consente di aprire la finestra di dialogo About.
Una seconda barra degli strumenti si trova immediatamente sotto la prima barra degli strumenti. Questa barra, denominata Style Bar, consente di specificare uno degli stili di allineamento del testo, a sinistra, centrato, a destra o giustificato. La selezione di uno degli stili modifica soltanto lo stato della barra Style Bar.
Una barra di stato si trova nella parte inferiore della finestra.
Una tavolozza mobile, con una matrice 3x4 di pulsanti di strumenti, si trova nella parte superiore della finestra.
Una barra della finestra di dialogo si trova sul bordo sinistro della finestra. Si tratta di una barra della finestra di dialogo, poiché il layout di questa barra di controllo viene definito in una risorsa di modello finestra di dialogo (IDD_VIEW_SELECT).
Il menu View consente di nascondere o visualizzare una delle prime quattro barre di controllo. La barra della finestra di dialogo è sempre visibile. Lo stato nascondi/visualizza delle barre di controllo Tools, Styles e Palette viene immediatamente riportato nelle caselle di controllo Hide/Show della barra della finestra di dialogo. È possibile nascondere o visualizzare una delle altre barre di controllo anche attivando e disattivando le relative caselle di controllo.
Con il comando Dlg Bar Top del menu View, è possibile modificare la disposizione delle barre di controllo, affinché la barra della finestra di dialogo venga visualizzata all'inizio dell'ordine Z delle barre di controllo. Quando la barra della finestra di dialogo si trova all'inizio, si estende lungo l'intero bordo di sinistra della finestra, ad eccezione dello spazio occupato dalla barra del titolo e da quella dei menu. Le estremità di sinistra delle due barre degli strumenti sono adiacenti alla barra della finestra di dialogo. Quando la barra della finestra di dialogo viene riportata nella posizione originale nell'ordine Z, dopo tutte le altre barre di controllo, la parte superiore della barra della finestra di dialogo è adiacente al bordo inferiore della seconda barra degli strumenti e la parte inferiore della barra della finestra di dialogo è adiacente al bordo superiore della barra di stato. Questa disposizione corrisponde all'algoritmo di base utilizzato per l'allocazione dello spazio della finestra alle barre di controllo, secondo il quale la prima barra dell'elenco viene gestita per prima.
Il menu Style consente di selezionare uno dei quattro stili di allineamento del testo: a sinistra, centrato, a destra o giustificato. La selezione effettuata viene riportata immediatamente nella casella combinata della barra Style Bar e nel pulsante corrispondente. In modo analogo, è possibile effettuare una selezione scegliendo uno degli stili dalla casella combinata Style Bar oppure scegliendo uno dei quattro pulsanti. La nuova selezione viene riportata immediatamente negli stati degli altri controlli e nel menu Style.
Il menu Palette consente di modificare la disposizione dello strumento della tavolozza da una matrice 3x4 a una 2x6.
Quando si seleziona uno strumento in Palette, nella barra dei messaggi della barra di stato viene visualizzato un messaggio in cui è indicato lo strumento che è stato selezionato tra i 12 disponibili. La selezione viene riportata nella casella combinata nella barra della finestra di dialogo. È possibile selezionare uno strumento anche utilizzando questa casella combinata.
Oltre all'indicazione dell'ultimo strumento selezionato, sulla barra di stato viene visualizzato lo stato dei tre tasti INS, BLOC MAIUSC e BLOC NUM.
Parole chiave
Nell'esempio vengono illustrate le seguenti parole chiave:
AfxFormatString1; AfxGetApp; AfxIsValidAddress; AfxRegisterWndClass; AfxThrowResourceException; BitBlt; CBrush::CreateSolidBrush; CCmdUI::ContinueRouting; CCmdUI::Enable; CCmdUI::SetCheck; CCmdUI::SetText; CComboBox::AddString; CComboBox::Create; CComboBox::GetCurSel; CComboBox::GetLBText; CComboBox::SetCurSel; CControlBar::GetBarStyle; CControlBar::SetBarStyle; CDC::Attach; CDC::Detach; CDC::PatBlt; CDC::RectVisible; CDialogBar::Create; CDumpContext::GetDepth; CFont::CreateFontIndirect; CFrameWnd::LoadFrame; CFrameWnd::RecalcLayout; CFrameWnd::SetMessageText; CGdiObject::Attach; CObject::AssertValid; CObject::Dump; CRect::Height; CRect::InflateRect; CRect::SetRectEmpty; CRect::Width; CStatusBar::Create; CStatusBar::GetPaneInfo; CStatusBar::SetIndicators; CStatusBar::SetPaneInfo; CString::LoadString; CToolBar::CToolBar; CToolBar::CommandToIndex; CToolBar::Create; CToolBar::GetButtonInfo; CToolBar::GetItemID; CToolBar::GetItemRect; CToolBar::LoadBitmap; CToolBar::SetButtonInfo; CToolBar::SetButtons; CToolBar::SetHeight; CToolBar::SetSizes; CWinApp::InitInstance; CWinApp::OnIdle; CWnd::ClientToScreen; CWnd::CreateEx; CWnd::GetCapture; CWnd::GetClientRect; CWnd::GetDC; CWnd::GetDlgItem; CWnd::GetOwner; CWnd::GetParentFrame; CWnd::GetSafeHwnd; CWnd::GetStyle; CWnd::GetWindowRect; CWnd::Invalidate; CWnd::InvalidateRect; CWnd::OnCancelMode; CWnd::OnCreate; CWnd::OnLButtonDown; CWnd::OnMouseActivate; CWnd::OnMouseMove; CWnd::OnSysColorChange; CWnd::PreCreateWindow; CWnd::ReleaseDC; CWnd::SendMessage; CWnd::SetCapture; CWnd::SetFont; CWnd::SetWindowPos; CWnd::ShowWindow; CWnd::UpdateDialogControls; CWnd::UpdateWindow; CreateBitmap; CreateCompatibleBitmap; CreateCompatibleDC; CreateDIBitmap; CreatePatternBrush; CreatePen; CreateSolidBrush; DeleteDC; DeleteObject; FillRect; FindResource; FrameRect; FreeResource; GetActiveWindow; GetBValue; GetCapture; GetDC; GetDeviceCaps; GetGValue; GetNextWindow; GetObjectType; GetParent; GetRValue; GetStockObject; GetSysColor; GetSystemMetrics; GetVersion; GetWindow; HIBYTE; InvertRect; LOBYTE; LoadCursor; LoadIcon; LoadResource; LockResource; MAKEINTRESOURCE; OffsetRect; PatBlt; RGB; ReleaseCapture; ReleaseDC; SelectObject; SendMessage; SetActiveWindow; SetBkColor; SetCapture; SetROP2; SetRect; SetTextColor; StretchDIBits; UpdateWindow; free; lstrcpy; malloc; memcpy; memset
Nota: |
---|
Alcuni esempi, tra cui il presente, non sono stati cambiati per riflettere le modifiche apportate alle procedure guidate, alle librerie e al compilatore di Visual C++, tuttavia forniscono comunque le istruzioni per completare l'attività desiderata. |