un ejemplo:
LINUX:
#include <stdio.h>
int main()
{
printf("Hola mundo");
return 0;
}
WINDOWS:
#include <windows.h>
LRESULT CALLBACK GestWndPrueba(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int)
{
MSG msg;
HWND hWnd;
WNDCLASS wc ={0};
wc.hInstance = hInst;
wc.lpszClassName = "wnd_prueba";
wc.lpfnWndProc = GestWndPrueba;
wc.style = CS_VREDRAW | CS_HREDRAW;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
if (!RegisterClass(&wc)) {
MessageBox(NULL, "No puedo registar el tipo de ventana", "Error", MB_ICONSTOP);
return 1;
}
hWnd = CreateWindow("wnd_prueba", "Ventana de prueba",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, (HMENU)NULL, hInst, NULL);
if (hWnd == NULL) {
MessageBox(NULL, "No puedo crear la ventana", "Error", MB_ICONSTOP);
return 1;
}
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
while (GetMessage(&msg, (HWND)NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (msg.wParam);
}
LRESULT CALLBACK GestWndPrueba(HWND hWnd, UINT messg, WPARAM wParam, LPARAM lParam)
{
RECT rc;
PAINTSTRUCT ps;
switch(messg) {
case WM_PAINT:
BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rc);
DrawText(ps.hdc, "Hola mundo", -1, &rc, DT_CENTER|DT_VCENTER|DT_SINGLELINE);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd,messg,wParam,lParam);
}
como veis... en windows hace falta algo más que un printf para hacer una sencilla aplicación. En linux, si programamos en modo gráfico (léase gtk, kde...) necesitaremos más de 4 líneas para crear una simple ventana; sin embargo, disponemos de muchas más funciones, clases y herramientas que nos ayudan y simplifican la vida a la hora de crear una aplicación real.
Una vez que se comprendan cuatro nociones sobre el entorno en el que programamos, no es difícil, sólo es cuestión de ponerse.
P.D.- El ejemplo de windos está hecho con el API Win32 (sin mfc, owl...)
Un saludo