Red de conocimiento informático - Problemas con los teléfonos móviles - [Ayuda] Cómo agregar una imagen de fondo al formulario principal en VC 6.0

[Ayuda] Cómo agregar una imagen de fondo al formulario principal en VC 6.0

Gente perezosa

/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".

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

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

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.