Ejemplo CTRLBARS: muestra barras de controles personalizadas

Actualización: noviembre 2007

El ejemplo CTRLBARS ilustra muchas opciones de las barras de controles:

  • Uso de varias barras de controles en una ventana de marco, ocultación y presentación selectiva de barras de controles y reorganización dinámica de controles en el borde de la ventana de marco. A las barras de controles se les asigna espacio en la ventana de marco en función de su orden z, que inicialmente es el orden en que se crean (vea CMainFrame::OnCreate). CTRLBARS cambia el orden Z de la barra de cuadro de diálogo con la función CWnd::SetWindowPos. Oculta o muestra una barra de controles mediante CWnd::ShowWindow. Siempre que CTRLBARS cambie el orden z, u oculte o muestre una barra de controles, llamará después a CFrameWnd::RecalcLayout para volver a asignar el estado real de la ventana a las restantes barras de controles visibles.

  • Barras de herramientas personalizadas, reorganización dinámica de botones en la barra de herramientas y adición de controles (como un cuadro combinado) a una barra de herramientas. CTRLBARS ilustra dos formas de personalizar una barra de herramientas. La primera barra de herramientas, Tool Bar, alterna la disposición de botones entre corta (5 botones) y larga (10 botones). CTRLBARS llama a CToolBar::SetButtonInfo para cada botón, a fin de asignarlo a una posición en mosaico en el mapa de bits de la barra de herramientas y a una identificación de comandos. La segunda barra de herramientas, Style Bar, ilustra la forma de reemplazar un botón de barra de herramientas (o el separador) con un control (un cuadro combinado en este ejemplo). CMainFrame::CreateStyleBar crea un separador de barra de herramientas con un ancho de 100 píxeles. A continuación, crea el cuadro combinado (IDW_COMBO) como objeto secundario de la barra de herramientas y establece la posición del cuadro combinado de forma que ocupe el espacio que acaba de asignar para el separador.

  • Barra de estado personalizada, indicadores personalizados y envío de texto a la línea de mensajes. Para barras de estado, el marco de trabajo actualiza automáticamente un indicador CAP LOCK, NUM LOCK o SCROLL LOCK si especifica, por ejemplo, ID_INDICATOR_CAPS como uno de los identificadores pasados en la matriz indicators[ ] a CStatusBar::SetIndicators. CTRLBARS muestra cómo se amplían los indicadores de barra de estado estándar con el estado de sobreimpresión (SOB), que el usuario puede alternar con la tecla INSERTAR. Esto requiere un controlador de mensajes para el comando ID_TOGGLE_INSERT (asignado a la tecla VK_INSERT) y una cadena de recurso (ID_INDICATOR_OVR) para el texto "OVR" que se mostrará cuando el modo de sobreimpresión esté activado. La identificación del recurso ID_INDICATOR_OVR es una constante MFC predefinida.

  • Barra de cuadro de diálogo, que es una barra de controles cuyo diseño está definido por una plantilla de recursos de cuadro de diálogo. Como en cualquier otra barra de controles, las notificaciones de controles de la barra de cuadro de diálogo se enrutan al propietario de la barra de cuadro de diálogo, en concreto, a la ventana de marco principal. Por ejemplo, CMainFrame::OnSelChangePalette es el controlador para la notificación CBN_SELCHANGE del control de cuadro combinado en una barra de cuadro de diálogo. CMainFrame también tiene controladores para dos de las tres casillas Hide/Show (Styles y Palette). No es necesario escribir ningún controlador para la tercera casilla, Ocultar/Mostrar barra de herramientas, puesto que el marco de trabajo proporciona el controlador estándar para ID_VIEW_TOOLBAR.

  • Paleta de herramientas flotante, que se comporta como una barra de herramientas pero muestra una matriz bidimensional de botones de herramientas y flota como una ventana no modal sobre la ventana de marco propietaria. La paleta de herramientas flotante se implementa en una clase reutilizable, CPaletteBar, derivada de CToolBar. Al derivarse de CToolBar, CPaletteBar tiene comportamiento de botón de barra de herramientas. El comportamiento específico de la paleta implementado en CPaletteBar incluye:

    • Ventana de tipo flotante (WS_POPUP).

    • Organización bidimensional de los botones de herramienta en filas y columnas: creación, dibujo y pruebas de clic en botones.

    • Barra de título delgada (sin texto).

    • Paleta móvil mediante un controlador rectangular.

  • CTRLBARS también ilustra el uso de ON_COMMAND_EX y ON_UPDATE_COMMAND_UI_RANGE. En la Nota técnica 31 se describen muchas de las opciones de personalización de barras de controles ilustradas por CTRLBARS.

Nota de seguridad:

Este código de ejemplo se proporciona para ilustrar un concepto y no debe utilizarse en aplicaciones o sitios Web, ya que quizás no ilustre las prácticas de codificación más seguras. Microsoft no asume ninguna responsabilidad por daños incidentales o consecuentes en caso de que el código de ejemplo se utilice para propósitos distintos de aquellos para los que se concibió.

Para obtener ejemplos e instrucciones para su instalación:

  • En el menú Ayuda de Visual Studio, haga clic en Ejemplos.

    Para obtener más información, vea Localizar archivos de ejemplo.

  • La lista de ejemplos completa con la versión más reciente está disponible en línea en la página Visual Studio 2008 Samples.

  • También encontrará ejemplos en el disco duro de su equipo. De manera predeterminada, los ejemplos y el archivo Léame se copian en una carpeta bajo \Archivos de programa\Visual Studio 9.0\Samples\. Para las versiones Express de Visual Studio, todos los ejemplos están en línea.

Generar y ejecutar el ejemplo

Para generar y ejecutar el ejemplo CTRLBARS

  1. Abra la solución Ctrlbars.sln.

  2. En el menú Generar, haga clic en Generar.

  3. En el menú Depurar, haga clic en Iniciar sin depurar.

Cuando ejecute CTRLBARS por primera vez, los distintos controles estarán visibles.

  • Se muestra una barra de herramientas con 5 botones bajo la barra de menús. El primer botón (flecha gruesa hacia arriba) alterna la disposición de la barra de herramientas entre formato corto (5 botones) y largo (10 botones). Los botones siempre están inactivos, excepto este primer botón Short/Long y el botón Help, que abre el cuadro About.

  • Hay otra barra de herramientas bajo la primera barra de herramientas. Es en esta barra de herramientas, denominada Style Bar, en la que se especifican uno de los siguientes estilos de alineación de texto: Left, Centered, Right o Justified. Si selecciona uno de los estilos, sólo cambiará el estado de la barra Style Bar.

  • Hay una barra de estado en la parte inferior de la ventana.

  • En la parte superior de la ventana hay una paleta flotante, con una matriz 3 x 4 de botones de herramienta.

  • Hay una barra de cuadro de diálogo en el borde izquierdo de la ventana. Es una barra de cuadro de diálogo porque el diseño de esta barra de controles está definido en un recurso de plantilla de cuadro de diálogo (IDD_VIEW_SELECT).

El menú View permite ocultar o mostrar cualquiera de las cuatro primeras barras de controles. La barra de cuadro de diálogo siempre está visible. El estado de ocultar o mostrar de las barras de control Tools, Styles y Palette se refleja automáticamente en las casillas Hide/Show de la barra de cuadro de diálogo. También puede ocultar o mostrar otra de las barras de controles alternando el estado de activación de su casilla.

Con el comando Dlg Bar Top del menú View puede reorganizar las barras de controles de forma que la barra del cuadro de diálogo esté en la parte superior del orden z de las barras de controles. Cuando la barra de cuadro de diálogo está en la parte superior, se extiende por todo el borde izquierdo de la ventana, salvo para el menú y las barras de título. La parte izquierda de las dos barras de herramientas toca la barra de cuadro de diálogo. Cuando la barra de cuadro de diálogo vuelve a su posición original en el orden z (después de todas las demás barras de controles), su borde superior tocará el borde inferior de la segunda barra de herramientas, y su parte inferior tocará el borde superior de la barra de estado. Esto refleja el algoritmo básico que controla la asignación del estado real de ventana de las barras de controles, basado en el principio "la primera que llegué será la primera en ser atendida".

El menú Style permite seleccionar uno de los cuatro estilos de alineación de texto: Left, Centered, Right o Justified. Cualquier selección que haga se reflejará automáticamente en el cuadro combinado de Style Bar y en el botón correspondiente. De forma similar, puede hacer una selección eligiendo uno de los estilos en el cuadro combinado de la barra Style Bar o presionando uno de los cuatro botones. La nueva selección se reflejará inmediatamente en los estados de los demás controles y en el menú Style.

El menú Palette permite cambiar la disposición de las herramientas de la paleta de 3 por 4 a 2 por 6.

Al seleccionar una herramienta en el menú Palette, la línea de mensaje de la barra de estado mostrará "You have selected the <tipo> tool", donde <tipo> indica cuál de las 12 herramientas está seleccionada. Esta selección se refleja en el cuadro combinado de la barra de cuadro de diálogo. También puede seleccionar una herramienta en este cuadro combinado.

La barra de estado, además de mostrar la última herramienta seleccionada, muestra el estado de tres teclas: INSERT, BLOQ MAYÚS y BLOQ NUM.

Palabras clave

En este ejemplo, se muestra el uso de las siguientes palabras clave:

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:

Algunos ejemplos, como éste, no se han modificado para reflejar los cambios en los asistentes, las bibliotecas y el compilador de Visual C++, pero, aun así, muestran cómo realizar la tarea deseada.

Vea también

Otros recursos

Ejemplos de MFC