¿Cómo crear una interfaz gráfica en lenguaje C?
//
#Contiene? " stdafx.h "
#¿Contiene? "c.h "
#¿Definición? ¿MAX_LOADSTRING? 100
//?Variable global:
HINSTANCIA? hInst//?Instancia actual
TCHAR? Título SZ[MAX _ LOADSTRING]; //Texto de la barra de título
TCHAR? szWindowClass[MAX _ LOADSTRING]; //?Nombre de clase de ventana principal
//?Declaración directa de las funciones contenidas en este módulo de código:
ATOMMyRegisterClass(hin instancia?hin instancia) ;
BOOLInitInstance(h instancia, int);
LRESULT? callbackndproc(HWND, UINT?WPARAM,?LPARAM);
INT_PTR? CallbackAbout(HWND, UINT?WPARAM,?LPARAM);
int? ¿APENTRÍA? _ twin main(hin instancia? hInstance,
HINSTANCE? hPrevInstance,
LPTSTRlpCmdLine,
int? nCmdShow)
{ p>
sin referencia _ PARAMETER(hPrevInstance);
sin referencia _ PARAMETER(lpCmdLine);
//?TODO:? Pon el código aquí.
¿MSG? glutamato monosódico;
¿Hassel? hAccelTable
//?Inicializar cadena global
LoadString(hInstance, IDS_APP_TITLE,? szTitle,? MAX_LOADSTRING);
LoadString(hInstance, IDC_C, ? szWindowClass, ? MAX_LOADSTRING);
MyRegisterClass(h instancia);
//?Realizar la inicialización de la aplicación:
¿Si? (!InitInstance? (hInstance, ?nCmdShow))
{
¿Regresión? Falso;
}
hAccelTable? =?LoadAccelerators(hInstance,MAKEINTRESOURCE(IDC_C));
//?Bucle de mensajes principal:
¿Cuándo? (GetMessage(&MSG,?NULL,?0,?0))
{
¿Si? (!TranslateAccelerator(msg.hwnd, hAccelTable? ampmsg))
{
Traducir mensaje (amp msg);
mensaje de envío (amp; msg);
}
}
¿Volver? (int)? msg.wParam
}
//
//Función:? MyRegisterClass()
//
//Propósito:? Registrar clase de ventana.
//
//Nota:
//
//A menos que quieras
/ / este código y agregarlo? ¿Windows? ¿"RegisterClassEx" en 95?
//¿Antes de la función? ¿Win32? Esta característica y su uso sólo son necesarios si el sistema es compatible. Es muy importante llamar a esta función.
//Para que la aplicación pueda obtener el icono asociado
//bien formateado.
//
¿ÁTOMO? MyRegisterClass(HINSTANCE?hInstance)
{
WNDCLASSEX? wcex
wcex.cb¿Tamaño? =?sizeof(WNDCLASSEX);
wcex.style =? ¿CS_HREDRAW? |?CS_VREDRAW
wcex.lpfnWndProc =? WndProc
wcex.cbClsExtra=? 0;
wcex.cbWndExtra=? 0;
wcex.hInstancia =? hInstancia
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 .lpsz nombre de clase =? szWindowClass
wcex . hola consm =? LoadIcon(wcex.hInstance,MAKEINTRESOURCE(IDI_small));
¿Regresión? registrar classex(amp;wcex);
}
//
//?Función:? Instancia inicial (HINSTANCE, int)
//
//?Propósito:? Guarde el identificador de instancia y cree la ventana principal
//
//?Nota:
//
//En este función, guardamos el identificador de instancia en una variable global
//Crea y muestra la ventana principal del programa.
//
¿Booleano? InitInstance(hin instancia?hInstance?int?nCmdShow)
{
HWND? hWnd
hInst? =?hInstancia? ///? Almacena el identificador de instancia en una variable global.
hWnd? =?CreateWindow(szWindowClass, szTitle, ?WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, ?0, ?CW_USEDEFAULT, ?0, ?NULL, ?NULL, ?hInstance?NULL);
Si? (!hWnd)
{
¿Volver? Falso;
}
Mostrar ventana (hWnd, nCmdShow);
Actualizar ventana (hWnd);
¿Volver? Verdadero;
}
//
//Función:? WndProc(HWND, UINT? WPARAM,? LPARAM)
//
//Propósito:? Manejar mensajes en la ventana principal.
//
//WM_COMMAND-? Usando el menú de la aplicación
//WM_PAINT-? Dibujar la ventana principal
//WM _ DESTROY-? Envía un mensaje de salida y regresa.
//
//
¿RESULTADO? ¿Llamar de vuelta? WndProc(HWND?hWnd,?UINT?Message,?WPARAM?wParam,?LPARAM?lParam)
{
int? wmid,? wmEvent
¿PAINTSTRUCT? PD;
¿HDC? hdc
¿Cambiar? (Noticias)
{
¿Caso? WM_Command:
wmId=? Loward(wParam);
wmEvent? =?Khiva(wParam);
//?Selección del menú de análisis:
¿Cambiar? (wmId)
{
¿Caso? IDM_About:
Dialog(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), ?hWnd, ?About);
Romper
Caso? IDM_EXIT:
Destruir ventana (hWnd);
Romper;
Valor predeterminado:
¿Regresar? DefWindowProc(hWnd, mensaje, ?wParam, ?lParam);
}
Romper
Caso? WM_PAINT:
hdc? =?BeginPaint(hWnd, ampPS);
//?TODO:? Agregue cualquier código de dibujo aquí. ...
EndPaint(hWnd, ampPS);
Romper;
¿Caso? WM_DESTROY:
PostQuitMessage(0);
Interrupción;
Predeterminado:
¿Volver? DefWindowProc(hWnd, mensaje, ?wParam, ?lParam);
}
¿Regresar? 0;
}
//?Manejador de mensajes para el cuadro "Acerca de".
¿INT_PTR? ¿Llamar de vuelta? About(HWND?hDlg,?UINT?Message,?WPARAM?wParam,?LPARAM?lParam)
{
sin referencia _ PARAMETER(lParam);
¿Cambiar? (Noticias)
{
¿Caso? WM_INITDIALOG:
¿Volver? (INT_PTR)VERDADERO;
¿Caso? WM_COMMAND:
¿SI? (Loward(wParam)?==?IDOC?||?Loward(wParam)?==?IDCANCEL)
{
EndDialog(hDlg,? LOWORD(wParam));
¿Volver? (INT _ PTR)VERDADERO;
}
Romper;
}
¿Regresar? (INT_PTR)FALSO;
}