Cómo escribir una interfaz gráfica en lenguaje C
Código
#include
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM //Declara el programa utilizado para procesar); Función de mensajes
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow )
{
static TCHAR szAppName[] = TEXT("MyWindow " );
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ; //Declarar un objeto de clase de ventana
//El lo siguiente son los atributos del objeto de clase de ventana wndclass
wndclass.style = CS_HREDRAW | CS_VREDRAW; //Estilo de ventana
wndclass.lpszClassName = szAppName; >
wndclass.lpszMenuName = NULL; //Menú de la ventana: Ninguno
wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); //Color de fondo de la ventana
wndclass.lpfnWndProc = WndProc; ? // Función de procesamiento de ventana
wndclass.cbWndExtra = 0; ?//Extensión de instancia de ventana: Ninguna
wndclass.cbClsExtra = 0; Ninguno
p>wndclass.hInstance = hInstance ? //Identificador de instancia de ventana
wndclass.hIcon = LoadIcon( NULL, IDI_APPLICATION ) //Icono de minimización de ventana: use el predeterminado icon
wndclass.hCursor = LoadCursor( NULL, IDC_ARROW ) ; //La ventana usa un cursor de flecha
if( !RegisterClass( &wndclass ) )
{ //Registrar clase de ventana. Si el registro falla, aparecerá un mensaje de error
MessageBox( NULL, TEXT("¡Error en el registro de ventana!"), TEXT("Error"), MB_OK | MB_ICONERROR );
return 0 ;
}
hwnd = CreateWindow( ? //Crear ventana
szAppName, //Nombre de clase de ventana
TEXT("Mi ventana "), ? //Título de la ventana
WS_OVERLAPPEDWINDOW,
? //Estilo de ventana
CW_USEDEFAULT, //Posición de visualización inicial de la ventana x: usar el valor predeterminado
CW_USEDEFAULT, //Posición de visualización inicial de la ventana y: usar el valor predeterminado
p>
CW_USEDEFAULT, //Ancho de la ventana: use el valor predeterminado
CW_USEDEFAULT, //Alto de la ventana: use el valor predeterminado
NULL, ?//Ventana principal :Ninguno
NULL, ?//Submenu:Ninguno
hInstance, // ¿Manejador de instancia de esta aplicación de ventana?
NULL ?
) ;
ShowWindow( hwnd, iCmdShow ) ; //Mostrar ventana
UpdateWindow( hwnd ) //Actualizar ventana
while( GetMessage( &msg, NULL, 0, 0 ) ) //Obtener el mensaje de la cola de mensajes
{
TranslateMessage( &msg ) //Convertir el mensaje de clave virtual en un mensaje de caracteres<; /p>
DispatchMessage( &msg );//Distribuir a la función de devolución de llamada (función de proceso)
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc( HWND hwnd, mensaje UINT, WPARAM wParam, LPARAM lParam )
{
HDC hdc; // Identificador del entorno del dispositivo
PAINTSTRUCT ps; //Dibujar estructura
RECT rect ? //Estructura rectangular
switch( mensaje ) //Mensaje procesado
{ p>
case WM_CREATE: ?//Mensaje enviado cuando se completa la creación de la ventana
MessageBox( hwnd, TEXT("¡La ventana ha sido creada!"), TEXT("Mi ventana" ), MB_OK | MB_ICONINFORMATION );
return 0;
case WM_PAINT: //Maneja el mensaje enviado cuando el área de la ventana no es válida
hdc = BeginPaint( hwnd , &ps );
GetClientRect( hwnd, &rect );
DrawText( hdc, TEXT( "¡Hola, tecnología Weiban!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER ) ;
EndPaint( hwnd, &ps );
return 0 ;
case WM_LBUTTONDOWN: //Maneja el mensaje de que se presiona el botón izquierdo del mouse< / p>
MessageBox( hwnd, TEXT("Se presiona el botón izquierdo del mouse.
"), TEXT("clic"), MB_OK | MB_ICONINFORMATION ) ;
return 0;
case WM_DESTROY: //Maneja el mensaje cuando la ventana está cerrada
MessageBox( hwnd, TEXT("¡Cerrar programa!"), TEXT("Fin"), MB_OK | MB_ICONINFORMATION );
PostQuitMessage( 0 );
return 0;
p>}
return DefWindowProc( hwnd, message, wParam, lParam ); //DefWindowProc maneja mensajes que no son procesados por nuestra función de procesamiento de mensajes personalizada
}