Cómo crear una interfaz gráfica usando lenguaje C
¿Es este el programa de interfaz más simple?
Este es el programa de interfaz más simple:?//?c++.cpp?:?Define el punto de entrada de la aplicación.
//
#include?"stdafx.h"
#include?"c++.h"
#define?MAX_LOADSTRING ?100
//?Variable global:
HINSTANCE?hInst; //Instancia actual
TCHAR?szTitle[MAX_LOADSTRING] //Barra de título; Texto
TCHAR?szWindowClass[MAX_LOADSTRING]; //?Nombre de clase de ventana principal
/?Declaración directa de funciones contenidas en este módulo de código:
ATOM MyRegisterClass (HINSTANCE?hInstance);
BOOL InitInstance(HINSTANCE,?int);
LRESULT?CALLBACK WndProc(HWND,?UINT,?WPARAM,?LPARAM);
p>INT_PTR?CALLBACK About(HWND,?UINT,?WPARAM,?LPARAM);
int?APIENTRY?_tWinMain( HINSTANCE?hInstance, HINSTANCE?hPrevInstance, LPTSTRlpCmdLine, intnCmdShow)
{
UNREFERENCED_PARAMETER( hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine); //TODO:?Pon tu código aquí.
MSG?msg;
HACCEL?hAccelTable;
//Inicializar cadena global
LoadString(hInstance,?IDS_APP_TITLE,? szTitle,?MAX_LOADSTRING);
LoadString(hInstance,?IDC_C,?szWindowClass,? MAX_LOADSTRING);
MyRegisterClass(hInstance);
// inicialización de la aplicación:
if(!InitInstance?(hInstance,?nCmdShow))
{
return?FALSE;
}
hAccelTable?=?LoadAccelerators (hInstance,?MAKEINTRESOURCE(IDC_C));
///?Bucle de mensajes principal:
while(GetMessage(&msg, ?NULL ,?0,?0))
{
if(!TranslateAccelerator(msg.hwnd,?hAccelTable,?))
if (! TranslateAccelerator( msg.hwnd,?hAccelTable,?&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return?(int)?msg.wParam;
}
//
/?Función:?MyRegisterClass()
//
/?Propósito:?Registrar clase de ventana.
//
/?Nota:
//
//Solo necesitas usar esta función cuando sea necesario
//Este código es compatible con "RegisterClassEx"
//La función se agregó a los sistemas "Windows?95" y "Win32" antes de su uso. Es muy importante llamar a esta función
//para que la aplicación pueda obtener el icono asociado
//"formateado correctamente".
//
ATOM?MyRegisterClass(HINSTANCE?hInstance)
{
WNDCLASSEX?wcex;
wcex.cbSize?=?sizeof(WNDCLASSEX);
wcex.cbSize? p>
wcex.style =?CS_HREDRAW?|?CS_VREDRAW;
wcex .lpfnWndProc =?WndProc;
wcex.cbClsExtra =?0;
wcex.cbWndExtra =?0;
wcex.hInstance =?hInstance;
p> p>wcex.hIcon =?LoadIcon(hInstance,?MAKEINTRESOURCE(IDI_C));
wcex.hCursor =?LoadCursor(NULL,?IDC_ARROW);
wcex.hbrBackground =?(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName =?MAKEINTRESOURCE(IDC_C);
wcex.lpszClassName =?szWindowClass;
wcex.hIconSm =?LoadIcon(wcex.hInstance,?MAKEINTRESOURCE(IDI_SMALL));
return?RegisterClassEx(&wcex);
}
/ /
// Guarde el identificador de instancia y cree la ventana principal
//
// Comentarios:
// p>
// En esta función, guardamos el identificador de instancia en una variable global y
//// creamos y mostramos la ventana principal del programa.
//
BOOL?InitInstance(HINSTANCE?hInstance,?int?nCmdShow)
{
HWND?hWnd; p> p>
hInst?=?hInstance;?//?Almacenar el identificador de instancia en una variable global
hWnd?=?CreateWindow(szWindowClass,?szTitle,?WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,?0 ,? CW_USEDEFAULT,?0,?NULL,?NULL,?hInstance,?NULL);
if(!hWnd)
{return?FALSE;
}
ShowWindow(hWnd,?nCmdShow);
UpdateWindow( hWnd);
return?TRUE;
} p>
//
/?Función:?WndProc(HWND,?UINT,?WPARAM,?LPARAM)
//
/? Finalidad: ?Procesar información desde la ventana principal.
//
//?WM_COMMAND -?Manejar el menú de la aplicación
//?WM_PAINT -?Pintar la ventana principal
/ /?WM_DESTROY -?Enviar mensaje de salida y regresar
//
/
LRESULT?CALLBACK?WndProc(HWND?hWnd,?UINT?message, ?WPARAM?wParam,?LPARAM?lParam)
{
int?wmId,?wmEvent;
PAINTSTRUCT?ps;
HDC ?hdc;
cambiar?(mensaje)
{
caso?WM_COMMAND:
wmId=?LOWORD( wParam);
wmEvent?=?HIWORD(wParam);
///?Selección del menú de análisis:
switch?(wmId)
{
caso?IDM_ABOUT:
DialogBox(hInst,?MAKEINTRESOURCE(IDD_ABOUTBOX),?hWnd,?About);
descanso;
caso?IDM_EXIT :
DestroyWindow(hWnd);
break;
predeterminado:
return?DefWindowProc(hWnd,?message,?wParam, ? lParam);
}
break;
case?WM_PAINT:
hdc?=?BeginPaint(hWnd,? &ps) ;
///?TODO:?Agrega cualquier código de dibujo aquí...
EndPaint(hWnd,? &ps);
break;
caso?WM_DESTROY:
PostQuitMessage(0);
descanso;
valor predeterminado:
retorno?DefWindowProc( hWnd , ?message,?wParam,?lParam);
}
return?
}
/?Mensaje sobre "box handler.
INT_PTR?CALLBACK?About(HWND?hDlg,?UINT?message,?WPARAM?wParam,?LPARAM?lParam)
{
UNREFERENCED_PARAMETER(lParam );
cambiar?(mensaje)
{
caso?WM_INITDIALOG:
retorno?(INT_PTR)TRUE;
case?WM_COMMAND:
if?IDCANCEL)
{
EndDialog(hDlg,?LOWORD(wParam));
retorno?(INT_PTR)VERDADERO;
}
descanso;
}
retorno?(INT_PTR)FALSO; p> p>
}