[Ayuda] Cómo agregar una imagen de fondo al formulario principal en VC 6.0
/ccidnet/tech/guide/2000/07/20/58_980.html
Agregar imágenes de fondo a los programas VC
(Autor: Luo Xiaobo 20 de julio de 2000 12:58)
VC es una poderosa herramienta de desarrollo visual, pero la interfaz estándar creada con VC es exactamente la misma que la de Windows. Las interfaces estándar creadas con VC son tan oscuras y monótonas como las de Windows, como el fondo de la ventana del marco principal en una aplicación de ventana de múltiples documentos. Entonces, ¿es posible cambiar el color de fondo de la ventana del marco principal o agregar una imagen hermosa como fondo a la ventana del marco principal? No es difícil. Pero a diferencia del método de cambiar el fondo de la ventana del marco principal en una aplicación de ventana de un solo documento, cambiar el fondo de la ventana del marco principal en una aplicación de ventana de múltiples documentos no se puede lograr simplemente usando el método ClassWizard de sobrecargar OnEraseBkgnd ( Función CDC * pDC). Debido a que en una aplicación de ventana de múltiples documentos, el área de fondo de la ventana del marco principal es la ventana de la clase MDIClient, cambiar el fondo está relacionado con la ventana de la clase MDIClient y su identificador es m_hWndMDIClient (en CMDIFrameWnd). Los siguientes son los pasos de implementación:
Primero, use el asistente MFC AppWizard para crear una aplicación de ventana de múltiples documentos
1. Haga clic en [Nuevo] en el menú "Archivo" de VC y el cuadro de diálogo "Nuevo" emergente ". "Cuadro de diálogo. Seleccione "MFC AppWizard [exe]" en la página "Proyecto", ingrese "DrawBackground" en el cuadro de edición "Nombre del proyecto" y presione el botón [Aceptar] para salir del cuadro de diálogo "Nuevo". p>
2. Seleccione las opciones predeterminadas en el cuadro de diálogo "MFC AppWizard Paso 1" al cuadro de diálogo "MFC AppWizard Paso 6" y haga clic en el botón [Finalizar] para completar la personalización de la aplicación de ventana de múltiples documentos.
Nota: MFC (Microsoft Foundation Class) es una biblioteca de clases de MS-Visual C.
El segundo paso es agregar mapas de bits a la aplicación.
En el menú "Ver" de VC, haga clic en "Recurso incluido...". En el cuadro de diálogo emergente, seleccione "Recurso incluido...", función OnSize (UINT nType, int cx, int cy). agregue manualmente la función virtual sobrecargada WNDPROC* CClientWnd::GetSuperWndProcAddr() para devolver un puntero de función.
Propiedades
Pública:
// Operaciones
pública:
// Sobrecargas
// ClassWizard generado sobrecarga de función virtual
// Sobrecarga de función virtual generada por ClassWizard
// Implementación de sobrecarga de función virtual generada por ClassWizard
// Implementación
public:
virtual ~CClientWnd();
// Generar función de mapeo de mensajes
protected:
file:// {{AFX _MSG(CClientWnd)
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnSize(UINT nType, int cx, int cy
p>
file://}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
El código del archivo de implementación de la clase CclientWnd es el siguiente:
// Controlador de mensajes CClientWnd
BOOL CClientWnd::.OnEraseBkgnd(CDC* pDC)
{
// TODO: Agregar aquí Su código de controlador de mensajes y/o valores predeterminados de llamada
CRect rectbk; // Tamaño del área del cliente
CDC dcMen // Tabla de contexto del dispositivo de memoria
CBitmap bmbk; // Objeto de mapa de bits
bmbk.LoadBitmap(IDB_BITMAP1); // Cargar mapa de bits desde el recurso
// Obtener el tamaño del mapa de bits p>
BITMAP stBitmap;
bmbk.GetObject(sizeof(BITMAP), stBitmap);
CSize bmsize(stBitmap.bmWidth, stBitmap.bmHeight); //////
dcMen.CreateCompatibleDC(pDC); // Crea una tabla de contexto de dispositivo compatible
// Selecciona el nuevo objeto de mapa de bits y guarda el objeto antiguo
CBitmap *pold=dcMen.CreateCompatibleDC(pDC); // Crea una tabla de contexto de dispositivo compatible
// Selecciona el nuevo objeto de mapa de bits y guarda el objeto antiguo SelectObject(bmbk); >
p>
GetClientRect(rectbk);
// Obtener el tamaño del área del cliente
// Copiar el objeto de mapa de bits de la memoria a la pantalla p>
pDC-gt; StretchBlt(rectbk.left, rectbk.top, rectbk.Width(),
rectbk.Height(), dcMen, 0, 0, bmsize.cx, bmsize. cy, SRCCOPY);
dcMen.SelectObject(pold);
// Restaurar el antiguo objeto de mapa de bits.
dcMen.DeleteDC();
// Libera la tabla de contexto del dispositivo de memoria
return true
}
Tabla de descripción del dispositivo WND.
WNDPROC*CClientWnd::GetSuperWndProcAddr()
{
static WNDPROC NEAR pfnSuper = NULL
return pfnSuper; puntero de función
}
void CClientWnd::OnSize(UINT nType, int cx, int cy)
{
CWnd:: OnSize(nType, cx, cy);
// TODO: agregue el código del controlador de mensajes aquí
file:// Redibujando la ventana
Invalidate() ;
}
Cuatro.
4. Clase CMainFrame
Defina una variable miembro m_wndClient de la clase CMainFrame en la clase CMainFrame y use la subclase m_wndClient como marco principal en CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct ) función Cliente de Windows.
El código es el siguiente:
Agregar en MainFrm.h
#include "ClientWnd1.h"
clase CMainFrame: public CMDIFrameWnd
{
privado:
CClientWnd m_wndClient
}
Agregue el siguiente código en MainFrm.cpp:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
clase CMainFrame: public CMDIFrameWnd
{
clase CMainFrame: public CMDIFrameWnd
{ if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1
file:// subclase m_wndClient para ser; la ventana del cliente de la ventana del marco principal
if(!m_wndClient.SubclassWindow(m_hWndMDIClient))
{
TRACE("Error al subclasificar la ventana del cliente MDI\ n" );
return -1;
}
}
5. Tecnologías clave
1 Este programa no es complicado. La clave es saber que en una aplicación de ventana de múltiples documentos, el área de fondo de la ventana del marco principal es una ventana similar a MDIClient.
2. La selección de la función debe ser correcta. Por ejemplo, en la función CClientWnd::OnEraseBkgnd (CDC * pDC), el tamaño del área de cliente obtenido al seleccionar la función GetClientRect (rectbk) es mayor que. el obtenido seleccionando la función GetClipBox (rectbk).
3. Sobrecargue la función OnSize (UINT nType, int cx, int cy) en la clase CclientWnd y agregue la función Invalidate() para volver a dibujar la ventana.