¿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) p>
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:
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.