1 ) ah,osea que te chupa?
.
2 ) Y, fijate.
Crear una ventana en C++, usando la API de windows:
http://www.pro-gramas.com/articulos-ver_...112-9.html
Esto nada mas te va a servir para Windows.
Ahora, Java es multiplataforma.... y si quiero crear una ventana de "hola mundo" en Java, puedo hacerlo de dos formas:
La forma rapida:
JOptionPane.showMessageDialog(frame, "Hola mundo!");
O la forma lenta:
// Acá defino como va a ser una de mis ventanas.
public class MiVentana extends JFrame{
// Acá digo: "Cuando alguien quiera hacer una ventana del tipo 'MiVentana', voy a ponerle esta configuración "
public MiVentana(){
// Acá creo un pedazo de texto (label).
JLabel texto = new JLabel("Hola Mundo!");
// Acá creo un boton.
JButton destructorUniverso = new JButton();
// Que va a decir "Destruir todo el universo"
destructorUniverso.setText("Destruir todo el universo");
// Y que, cuando alguien le haga click o toque enter... (1)
destructorUniverso.addActionListener(new ActionListener(){
public void actionPerformed (ActionEvent e){
// (1).... cierre la aplicación!!!
System.exit(0);
}
});
// Bueno, ahora meto el Label en la ventana.
this.add(texto);
// y ahora, meto el boton destruyetodo en el universo.
this.add(destructorUniverso);
}
}
Acá definiste como queres que sea la ventana. Desde otro lado, creas la ventana con:
// Ok. quiero tener una ventana del tipo MiVentana.
MiVentana estaVentanaVoyAMostrar = new MiVentana();
// Ahora que la tengo creada en memoria, la quiero mostrar al usuario.
estaVentanaVoyAMostrar.setVisible(true);
Mirá ahora en C++, creo que es usando el MFC de Microsoft (Microsoft Foundation Class):
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc; //clase estructura de la ventana
HWND hwnd; //var de la ventana
MSG Msg;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc))
{
MessageBox(NULL, "El registro de windows fallo!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
g_szClassName,
"Titulo: Ventana de Hola Mundo",
WS_SYSMENU ,
CW_USEDEFAULT, CW_USEDEFAULT, 500, 500,
NULL, NULL, hInstance, NULL);
// Ah, en la api de Windows, hay miles de funciones que reciben cinco o seis NULLs como parametros.
if(hwnd == NULL)
{
MessageBox(NULL, "No se creo el windows!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(hwnd, nCmdShow);
updateWindow(hwnd);
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
[Esto, solo para crear la Ventana, despues tenes que codear la logica de la misma... en java, solo eran dos lineas... acordate!]
Te recomiendo que dejes C/C++, si queres hacer un frontend grafico... C/C++ se utiliza para software que necesite mucho procesamiento. Lo que se suele hacer, en el caso de que SI O SI tenga que usarse C/C++, es crear toda la capa logica en estos lenguajes, crear las "pantallitas" en algun lenguaje mas copado (java, python, ruby, C#), y luego comunicar una aplicación con otra (en el caso de que sea una app. desktop, java te da un framework re loco para comunicarte con procesos en C).
Ademas, despues tenes miles de frameworks copados, dependiendo de la aplicación que hagas...
El de Android para java, hacia un macheo re loco, y te generaba XMLs locos. Realmente estaba copado.
Para Desktop, el mundo de java está dividido en Swing (el que puse yo mas arriba, el default), o SWT (eclipse está hecho con SWT). Tenes AWT, que es una verga atomica y vieja y sirvió historicamente como base para crear Swing (osea, no uses AWT).
Si no, podes irte por otros lados... para todo lo que es WEB, tenes millones de formas de hacerlo. Wicket, JavaFX, GWT, HTML puro,flex,etc...
Como ultimo dato, si tu app es consiste solo de ABMs simples, podes usar el framework Spring Roo, que basicamente te automatiza casi toda la aplicación, codeando casi nada, y dandote chances de tocar el codigo que te genera, para agregarle cosas copadas. Creo que Grails tambien tiene esa capacidad de generarte todo, mediante configuración y "convenciones de nombres", pero realmente de Grails solo conozco el nombre.