Red de conocimiento informático - Material del sitio web - ¿Cómo agregar un botón a un solo documento en MFC?

¿Cómo agregar un botón a un solo documento en MFC?

En una estructura de vista de documento único (SDI), las vistas se utilizan generalmente para mostrar datos. Sin embargo, a veces también desea mostrar botones u otros controles en la vista para satisfacer las necesidades del usuario. VC6.0 no proporciona directamente un asistente para agregar botones a la vista (tal vez lo haya, pero no lo encontré). A continuación, le daré una manera de agregar manualmente un botón y hacer que el botón responda a los eventos.

Paso uno: agregar un botón

1. Primero defina un identificador de botón en **View.h

#define ID_BUTTON 100

2. A continuación, agregue una variable miembro a la clase C**View

CButton m_myButton; //Esta declaración está escrita en la definición de clase de **View.h y debe declararse como un tipo PUBLIC.

3. Luego cree una instancia de botón

m_myButton.Create(_T("Sample Button"), //El atributo de título del botón y la visualización del botón

WS_CHILD| WS_VISIBLE|BS_PUSHBUTTON|BS_ICON, // El botón también es un formulario y también tiene un estilo de formulario. Estas constantes se utilizan para lograr ciertos efectos mediante operaciones OR. El significado de estas constantes se puede encontrar en. MSDN.

CRect(. 20,320,50,340), //Este parámetro indica la posición del botón en la vista y el tamaño del botón

this, //Este puntero. apunta a la forma principal del botón

ID_BUTTON); //Esta es la constante recién definida para el botón, el ID de control del botón

4. m_MyButton.ShowWindow(SW_HIDE). Esta función muestra el botón según el estilo del parámetro. En este momento, indica Ocultar el botón. Si desea mostrar el botón, puede usar SW_SHOW como parámetro. cuando desee utilizar el botón, llame a la función m_MyButton.ShowWindow(SW_SHOW) para mostrar el botón.

Descripción: El botón se inicializa en la función C**View::OnCreate(). Esta función es una función de inicialización que se llama cuando se crea el formulario. Es más apropiado inicializar objetos como botones en este momento.

int C**View::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

if (CView::OnCreate(lpCreateStruct) == -1)

return -1;

m_MyButton.Create(_T("Botón de muestra"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_ICON,

CRect(20,320,50,340), this, ID_BUTTON);

m_MyButton.SetIcon(AfxGetApp()->LoadIcon(ICON_SAVE)); //Carga un icono en el botón

m_MyButton.ShowWindow(SW_HIDE);

p>

return 0;

}

Paso 2: Función de mensaje

El botón en este momento no puede responder a ningún mensaje. A continuación agregamos manualmente el mensaje del botón.

1. Declarar el prototipo de función

Declarar una función de tipo protegido en la declaración de la clase C**View

//{{AFX_MSG(CSoftView)

afx_msg void OnMyButton();

//}}AFX_MSG

El enfoque habitual, que también es el enfoque del asistente VC6.0, es declare la función de procesamiento de mensajes en //{{AFX_MSG(CSoftView)~~~ //}}etiqueta AFX_MSG, por supuesto, en VS.NET 2003, no veremos esta etiqueta. Lo que realmente funciona es afx_msg, que indica que la función posterior es una función de procesamiento de mensajes.

2. Implementación de la función

La función se implementa a continuación. Obviamente, esta función también es una función miembro de la clase C**View, por lo que se implementa en **View. cpp

void C**View::OnMyButton()

{

MessageBox("Me hiciste clic");

}

3. Si ejecuta el programa en este momento, el botón aún no responderá a ningún evento. Debido a que el mensaje generado por el evento se entrega a la vista, debemos pasar el mensaje de la vista al botón. Es muy sencillo de implementar. Busque la siguiente marca en **View.cpp:

BEGIN_MESSAGE_MAP(C **View, CView)

END_MESSAGE_MAP()

Escribe el siguiente código en esta etiqueta: ON_BN_CLICKED(ID_BUTTON, OnMybutton)

Este código Significa que el objeto señalado por ID_BUTTON responde al evento de clic (ON_BN_CLICKED), y la función de procesamiento de eventos es OnMybutton. Este es el mecanismo de mapeo de mensajes de MFC. No diré mucho sobre este mecanismo aquí y esperaré el seguimiento.

En este punto, se crea un botón que puede responder a eventos de clic. Si desea responder a otros eventos, puede crearlo de esta manera. Solo necesita cambiar el paso 3 de este proceso y cambiar ON_BN_CLICKED al tipo de mensaje al que desea responder.