Red de conocimiento informático - Espacio del host - Quiero aprender programación de interfaz gráfica en C++. Algunas personas dicen que MFC está desactualizado. Recomiende una buena tecnología de programación de interfaz.

Quiero aprender programación de interfaz gráfica en C++. Algunas personas dicen que MFC está desactualizado. Recomiende una buena tecnología de programación de interfaz.

Le damos un ejemplo de programación del SDK de Windows. Este código puede aparecer en una ventana normal de Windows.

Este código pasó la prueba de Visual C++.

#pragma comment(linker,"/SUBSYSTEM:Windows? /ENTRY:mainCRTStartup")

#include

/* Convertir el nombre de la clase en una variable global*/

TCHAR szClassName[ ] = TEXT("WindowsApp");

/* Esta función es llamada por la función interna de Windows DispatchMessage()*/

LRESULT Procedimiento de ventana de devolución de llamada (HWND hWnd, mensaje UINT, WPARAM wParam, LPARAM lParam)

{

HDC hdc;

PAINTSTRUCT ps;

RECT rect ;

cambiar (mensaje)? /* Procesar mensaje*/

{

caso WM_DESTROY:

PostQuitMessage (0) ;? / * Enviar WM_QUIT a la cola de mensajes*/

break;

case WM_PAINT:

hdc = BeginPaint (hWnd, &ps);

GetClientRect (hWnd, &rect) ;

DrawText (hdc, TEXT("¡Hola, Windows NT!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

EndPaint (hWnd, &ps);

romper;

predeterminado:? /* Mensaje no procesado*/

devolver DefWindowProc (hWnd, mensaje, wParam , lParam) ;

}

return 0;

}

/* La siguiente es la función principal*/

int main ( void )

{

HINSTANCE hThisInstance = GetModuleHandle(NULL) ;

int nFunsterStil = SW_SHOW ;

HWND hWnd; / * Este es el identificador de la ventana*/

Mensajes MSG;/* Los mensajes de la aplicación se almacenan aquí*/

WNDCLASSEX wincl;/* Estructura de datos del clase de ventana*/

/* Estructura de ventana*/

wincl.hInstance = hThisInstance;

wincl.lpszClassName = szClassName;

wincl.lpfnWndProc = WindowProcedure /* Esta función es llamada por el sistema operativo Windows*/

wincl.style = CS_DBLCLKS /* Obtener el comando de doble clic*/

wincl; .cbSize = sizeof (WNDCLASSEX);

/* Usar icono y puntero del mouse predeterminados*/

wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);

wincl.hIconSm = CargarIcon (NULL,

IDI_APPLICATION);

wincl.hCursor = LoadCursor (NULL, IDC_ARROW);

wincl.lpszMenuName = NULL; /* Sin menú*/

wincl.cbClsExtra = 0;/* No hay bytes adicionales después de la clase de ventana*/

wincl.cbWndExtra = 0;/* Estructura o instancia de ventana*/

/* Usar el color predeterminado de la ventana Como color de fondo de la ventana*/

wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

/* Registra la clase de ventana. Si el registro falla, salga del programa */

if (!RegisterClassEx (&wincl))

return 0;

/* La clase de ventana ha sido registrada. El programa que lo creó*/

hWnd = CreateWindowEx (

0,

szClassName, /* nombre de clase*/

TEXT ( "Aplicación de Windows"), /* El texto de la barra de título de la ventana*/

WS_OVERLAPPEDWINDOW, /* La ventana predeterminada*/

CW_USEDEFAULT, /* La posición de la barra superior esquina izquierda de la ventana*/

CW_USEDEFAULT, /* Posición de la esquina inferior derecha de la ventana*/

544, /* Ancho de ventana (en píxeles) */

375, /* Alto de la ventana (en "píxeles") */

HWND_DESKTOP,/* La ventana es una ventana secundaria del escritorio*/

NULL, /* Esta ventana no tiene menú*/

hThisInstance, /* Identificador de la instancia del programa*/

NULL /* No hay datos creados por la ventana*/

);

/* Mostrar ventana*/

ShowWindow (hWnd, nFunsterStil);

/* Redibujar ventana*/

UpdateWindow(hWnd);

/* Ejecutar bucle de mensajes. Vaya a la función GetMessage() y devuelva 0 */

while (GetMessage (&messages, NULL, 0, 0))

{

/* Put el mensaje virtual Traducir a información de caracteres*/

TranslateMessage(&messages);

/* Enviar mensaje al procedimiento de ventana*/

DispatchMessage(&messages);

}

/* Devuelve el valor de retorno de la función PostQuitMessage()*/

return messages.wParam;

}