Red de conocimiento informático - Material del sitio web - ¿Cómo agregar botones en un documento único MFC?

¿Cómo agregar botones en un documento único 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.