Cómo agregar un fondo a un cuadro de diálogo en Visual C++
El diseño de la interfaz de una aplicación ocupa una gran carga de trabajo en todo el diseño del programa. El éxito o el fracaso de una aplicación tiene un gran impacto en la calidad de la interfaz. Por lo tanto, el diseño de software moderno pone especial énfasis en. El diseño de la interfaz también debe hacerse muy bien y facilitar su uso a los usuarios. Los cuadros de diálogo son uno de los elementos de la interfaz proporcionados por Windows. Se utilizan para ingresar información y también se pueden usar para colocar resultados o mediaciones del programa. Un cuadro de diálogo es uno de los elementos de la interfaz proporcionados por Windows, que se utiliza para ingresar información y también se puede usar para comunicar los resultados del programa o resultados intermedios al usuario. De hecho, es una de las formas de interacción más utilizadas en las aplicaciones.
screen.width-333)this.width=screen.width-333">
En Visual C++, el fondo de un cuadro de diálogo suele ser gris y el texto negro ( este también es el valor predeterminado) como se muestra a continuación
screen.width-333)this.width=screen.width-333"> Pero el usuario puede cambiar fácilmente el fondo del cuadro de diálogo usando un mapa de bits. Aquí, escribí una clase CBmpDialog para introducir un mapa de bits en el fondo del cuadro de diálogo, mejorando así el efecto visual del cuadro de diálogo. Aquí, escribí una clase CBmpDialog que introduce un mapa de bits en el fondo del cuadro de diálogo, mejorando así el efecto visual del cuadro de diálogo. El efecto del cuadro de diálogo con un fondo de mapa de bits agregado se muestra en las dos figuras siguientes.
screen.width-333)this.width=screen.width-333">
El proceso de creación de la clase CBmpDialog es el siguiente. Primero, diseñe un cuadro de diálogo en el recurso, y luego use la clase base CDialog Cree una clase que administre cuadros de diálogo, es decir, CBmpDialog Agregue las funciones de procesamiento de mensajes OnCtlColor () y OnEraseBkgnd () a través del asistente de clases y agregue el siguiente contenido a su archivo de encabezado BmpDialog.h:
# define BITMAP_TILE 0
# define BITMAP_CENTER 1
La clase BmpDialog es una clase de diálogo
clase CBmpDialog: CDialog público
{
public:
void SetBitmap (UINT ResID,int Type=BITMAP_TILE); // Esta función
carga el mapa de bits y determina cómo hacerlo. muéstralo, la posición predeterminada es mosaico
private:
int mType; // Definir una variable de ubicación de mapa de bits
CBrush mHollowBrush; una clase de pincel
CBitmap mBitmap; // Definir una clase de mapa de bits
.};
A continuación, agregue el siguiente código al programa fuente BmpDialog.cpp:
1, constructor CBmpDialog::CBmpDialog (), construirá un objeto CbmpDialog y generará un pincel vacío para referencia de clase.
CBmpDialog::CBmpDialog (CWnd* pParent /*=NULL*/)
:CDialog (CBmpDialog::IDD, pParent)
{
mHollowBrush .CreateStockObject (HOLLOW_BRUSH);
}
2. Función CBmpDialog::OnCtlColor (), cuando el cuadro de diálogo esté listo para mostrar el control, llame a esta función. y devuelve un HBRUSH, utilizado para dibujar el fondo del control. Para los controles estáticos, se devuelve un pincel vacío y el mapa de bits aparecerá en el control. Para los controles estáticos, se devuelve un pincel vacío y el mapa de bits se muestra detrás del control; para otros controles, se usa el valor predeterminado de OnCtlColor () y se permite que el control se dibuje normalmente, sin que el mapa de bits se muestre detrás del control.
HBRUSH CBmpDialog::OnCtlColor (CDC* pDC, CWnd* pWnd,
UINT nCtlColor)
{
if (mBitmap. GetSafeHandle ( ) ! =NULL) // Devuelve un identificador de mapa de bits no vacío
{
switch (nCtlColor)
{
case CTLCOLOR_STATIC: // Devuelve un pincel nulo si es un control estático
pDC->SetBkMode ( TRANSPARENT);
return (HBRUSH) mHollowBrush.m_hObject
break;
default: // Para otros controles, use los valores predeterminados
HBRUSH hbr = CDialog:.OnCtlColor (pDC,
pWnd, nCtlColor );
return hbr
break;
}
}
else // cuando hay no es un bit Cuando el fondo de la imagen es
{
HBRUSH hbr = CDialog::OnCtlColor (pDC, pWnd, nCtlColor
return hbr; p>
}
}
}
}
3, función CBmpDialog::OnEraseBkgnd (), cuando el cuadro de diálogo Es necesario volver a dibujar el cuadro. El marco llamará a esta función. OnEraseBkgnd () muestra el mapa de bits de dos maneras: si el mapa de bits está centrado, se llama a OnEraseBkgnd () de la clase base para volver a dibujar todo el fondo, y luego el mapa de bits se muestra en el centro del cuadro de diálogo si desea organizarlo; el mapa de bits en forma de mosaico, los mapas de bits se organizan comenzando desde la esquina superior izquierda del cuadro de diálogo hasta que llenan todo el cuadro de diálogo.
BOOL CBmpDialog::OnEraseBkgnd (CDC* pDC)
{
if (mBitmap.m_hObject!=NULL) // El identificador del objeto no es nulo
p>
{
CDC MemDC;
BITMAP bm
CRect Rect
int; x=0, y= 0;
GetClientRect (&Rect); // Obtener el tamaño del área del cliente
mBitmap.GetObject (sizeof (BITMAP),&. bm); // Rellenar con información de mapa de bits los campos de la estructura BITMAP
MemDC.CreateCompatibleDC (pDC); // Inicializar el objeto de descripción de memoria
CBitmap*pOldBitmap=MemDC.SelectObject (& mBitmap) ; // Defina una clase CBITMAP e inicialice el mapa de bits seleccionado en el objeto de descripción del dispositivo
if (mType==BITMAP_CENTER) // El mapa de bits centra el fondo
{
CDialog::OnEraseBkgnd( pDC); // Redibuja todo el fondo primero.bmHeight) /2 // La coordenada vertical superior izquierda del mapa de bits
pDC->BitBlt
(x, // Coordenada horizontal del mapa de bits de destino
y, // Coordenada vertical del mapa de bits de destino
bm.bmWidth, // Altura del bloque a convertir
bm.bmHeight, // El ancho del bloque a convertir