Cómo escribir una interfaz gráfica en lenguaje C
# include ltwindows.h gt
Devolución de llamada LRESULT WndProc(HWND, UINT, WPARAM, LPARAM); //Declara la función utilizada para procesar mensajes.
int WINAPI WinMain(h instancia h instancia, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static TCHAR szapname[]= TEXT(" mi ventana ");
HWND hwnd
MSG MSG;
WNDCLASS wndclass//Declarar un objeto de clase de ventana
//Lo siguiente son Propiedades del objeto de clase de ventana wndclass.
wnd class .lpszclassname = SZ appname;? //Nombre de clase de ventana
wndclass.lpszMenuName = NULL//Menú de ventana: Ninguno
wnd class HBR background =(HBRUSH)GetStockObject(WHITE _ BRUSH); Color
wndclass.lpfnWndProc = WndProc? //Función de procesamiento de ventanas
wnd class.cbwndextra = 0;? //Extensión de instancia de ventana: Ninguna
wnd class cbclsextra = 0;? // Extensión de clase de ventana: Ninguna
wnd class .h instancia = h instancia;? //Identificador de instancia de ventana
wndclass.hIcon = LoadIcon(NULL,IDI_Application);? //Icono de minimizar ventana: utiliza el icono predeterminado.
wnd class . hcursor = load cursor(NULL, IDC_ARROW); //La ventana usa el cursor de flecha.
Si (!register class( amp; wndclass))
{//Registrar clase de ventana, aparecerá un mensaje de error si falla el registro.
MessageBox(NULL, TEXT("¡Error en el registro de la ventana!")), TEXT ("error "), MB_OK | MB_icon error);
Devuelve 0;
}
hwnd = CreateWindow(?//Crear una ventana
SzAppName, //Nombre de clase de ventana
TEXT("Mi ventana"),? //Título de la ventana
WS_OVERLAPPEDWINDOW,?//Estilo de la ventana
CW_USEDEFAULT, //Posición de visualización inicial de la ventana X: use el valor predeterminado.
CW_USEDEFAULT, //Posición de visualización inicial de la ventana y: use el valor predeterminado
CW_USEDEFAULT, //Ancho de la ventana: use el valor predeterminado
CW_USEDEFAULT, //Alto de la ventana: use el valor predeterminado. .
NULO,? //Ventana principal: Ninguna
NULL,? //Submenú: Ninguno
HInstancia, //¿Manejador de instancia de esta aplicación de ventana?
¿NULL? //
);
ShowWindow(hwnd, icmd show); //Mostrar ventana
Actualizar ventana (hwnd); //Actualizar ventana
while(GetMessage(amp; Msg, NULL, 0, 0)) //Obtiene el mensaje de la cola de mensajes.
{
Traducir mensaje(amp;msg); //Convertir mensaje de clave virtual en mensaje de caracteres
mensaje de envío(amp;msg);? //Distribuido a la función de devolución de llamada (función de proceso)
}
Devuelve msg.wParam
}
LRESULT devolución de llamada WndProc( HWND hwnd , mensaje UINT, WPARAM wParam, LPARAM lParam)
{
HDC hdc//Control del entorno del dispositivo
PAINTSTRUCT ps//Estructura de dibujo
rectángulo RECT;? //Estructura rectangular
Switch( mensaje) //Procesar el mensaje.
{
Caso WM_CREATE:? //Mensaje enviado al crear la ventana.
MessageBox(hwnd, TEXT("¡La ventana ha sido creada!")), TEXT("Mi ventana"), MB_OK | MB_icon información);
Devuelve 0;
Caso WM_PAINT:? // Maneja el mensaje enviado cuando el área de la ventana no es válida.
hdc = comenzar pintura(hwnd y PS);
GetClientRect(hwnd y rect
DrawText( hdc, Texto("Hola, Micro); tecnología complementaria ")), -1, amprect, DT_single line | DT_CENTER | DT_VCENTER);
Capa superior (hwnd amp; PS);
Devuelve 0;
Caso WM_LBUTTONDOWN: //Maneja el mensaje de que se presiona el botón izquierdo del mouse.
MessageBox(hwnd, TEXT("Se presionó el botón izquierdo del mouse."), TEXT ("hacer clic"), MB_OK | MB_icon información);
Devuelve 0 ;
Caso WM_DESTROY: //Maneja el mensaje cuando la ventana está cerrada.
MessageBox( hwnd, TEXT("¡Cerrar el programa!"), TEXT ("fin "), MB_OK | MB_icon información);
PostQuitMessage(0);
Return 0;
}
Return DefWindowProc(hwnd, message, wParam, lParam); //El procesamiento de DefWindowProc no es manejado por nuestro controlador de mensajes personalizado.
}