Conceptos básicos de programación de Windows: utilice WIN32API para escribir la función WinMain para completar el registro de la clase de ventana, la creación, visualización y actualización de la ventana y completar el ciclo de mensajes.
//////////////////////////////////////////// // /////////////////////
// 04Archivo FirstWindow.cpp
#include
#include "stdafx.h"
// Prototipo de función de función de ventana
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM); p>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char szClassName[] = "MainWClass";
WNDCLASSEX wndclass;
// Rellena la estructura WNDCLASSEX con parámetros que describen la ventana principal
wndclass. cbSize = sizeof(wndclass); // El tamaño de la estructura
wndclass.style = CS_HREDRAW|CS_VREDRAW; // Especifica el rediseño si el tamaño cambia
wndclass. lpfnWndProc = MainWndProc; // Puntero de función de ventana
wndclass.cbClsExtra = 0; // Sin memoria de clase adicional
wndclass.cbWndExtra = 0; >
wndclass.hInstance = hInstance; // Identificador de instancia
wndclass.hIcon = ::LoadIcon(NULL,
IDI_APPLICATION // Usar icono predefinido
wndclass.hCursor = ::LoadCursor(NULL,
IDC_ARROW); // Usar cursor predefinido
wndclass.hbrBackground = (HBRUSH)
: :GetStockObject(WHITE_BRUSH); // Utilice un pincel de fondo blanco
wndclass.lpszMenuName = NULL; // No especifique un menú
wndclass.lpszClassName = szClassName; de la clase de ventana
wndclass.hIconSm = NULL; // Icono pequeño sin clase
// Registra esta clase de ventana
::RegisterClassEx(&wndclass);
// Crea la ventana principal
HWND hwnd = ::CreateWindowEx(
0, // dwExStyle, estilo extendido
szClassName , // nombreClaselp
e, nombre de clase
"¡Mi primera ventana!", // lpWindowName, título
WS_OVERLAPPEDWINDOW, // dwStyle, estilo de ventana
CW_USEDEFAULT, // X , coordenada X inicial
CW_USEDEFAULT, // Y, coordenada Y inicial
CW_USEDEFAULT, // nAncho, ancho
CW_USEDEFAULT, // nAlto, alto p>
p>
NULL, // hWndParent, identificador de ventana principal
NULL, // hMenu, identificador de menú
hInstance, // hlnstance, identificador de instancia de programa
NULL); // lpParam, datos del usuario
if(hwnd == NULL)
{
::MessageBox(NULL) , "¡Error al crear la ventana!", "error", MB_OK);
return -1;
}
// Muestra la ventana y actualiza la ventana área del cliente
::ShowWindow(hwnd, nCmdShow);
::UpdateWindow(hwnd);
// Obtener el mensaje del montón de mensajes p>
MSG msg;
while(::GetMessage(&msg,NULL, 0, 0))
{
// Convertir mensaje de teclado
: :TranslateMessage(&msg);
// Envía el mensaje a la función de ventana correspondiente
::DispatchMessage(&msg);
}
// El programa finaliza cuando GetMessage devuelve 0
return msg.wParam;
}
LRESULT CALLBACK MainWndProc( HWND hwnd, mensaje UINT, WPARAM wParam , LPARAM lParam)
{
char szText[] = "¡El programa de ventana más simple! ";
switch (mensaje)
{
case WM_PAINT: // Es necesario volver a pintar el área del cliente de la ventana
{
HDC hdc;
PAINTSTRUCT ps;
//Hacer válida el área del cliente no válida y obtener el identificador del entorno del dispositivo
hdc = : :BeginPaint (hwnd, &ps)
// Mostrar texto
::TextOut(hdc, 10, 10, szText, strlen(szText));
::EndPaint(hwnd, &ps);
retorno 0;
}
caso WM_CHAR:
{
char szChar[20];
sprintf(szChar,"char is %d",wParam);
MensajeB
buey(hwnd,szChar,"Windows",MB_OK);
descanso
}
caso WM_LBUTTONDOWN:
{ p>
p>
MessageBox(hwnd,"ratón hecho clic","mensaje",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"Programa de Windows",strlen("Programa de Windows"));
ReleaseDC(hwnd,hdc); break;
}
caso WM_CLOSE:
if(IDYES==MessageBox(hwnd,"¿Salir del programa?","Windows",MB_YESNO))
{
DestroyWindow(hwnd);
}
case WM_DESTROY: // Destruyendo ventana
/ / Enviar a la cola de mensajes Entrega un mensaje WM_QUIT, solicitando a la función GetMessage que devuelva 0, finalizando el bucle de mensajes
::PostQuitMessage(0);
devuelve 0;
}
// Entregar los mensajes que no procesamos al sistema para su procesamiento predeterminado
return ::DefWindowProc(hwnd, message, wParam, lParam); p>
}