Hola , pues bueno tengo una duda , he dejado vb para meterme con C y tengo una duda.Cuando usas C y creas una interfaz grafico y no lo usas para programar como consola , ¿Como puedes saber donde tienes que agregar el codigo a cada objeto? Es decir agregar codigo a cada button , textbox

Si no me he explicado bien avisad

Gracias
Lo que ves no es lo que es , y mucho menos lo que crees , es al revés
para iniciarte en como crear una gui en con las api de windows puedes guiart de este tutorial:

[Enlace externo eliminado para invitados] ... 744.0.html

Como habras observado todo se crea desde el callback.

salu2!
Imagen
y con un bonito bucle de mensajes esperando eventos, tambien aca [Enlace externo eliminado para invitados]
//mHmm..
jaja, basic mata (no me malinterpretes yo tambien empece con basic, pero endulza demasiado la programación)
En basic la mayoría del código que se encarga de crear ventanas es generado automáticamente, pero en c es cosa tuya.
Esto es relativamente complicado, pero existen atajos como MFC (con vc++6 o pagando en las versiones nuevas) o Windows Forms (en las nuevas versiones, con aplicaciones CLR)
Por tu pregunta diria que tienes vc++ 6 ya que en las versiones nuevas el entorno es parecido a vb6, con dos clicks en el control ves el código. En vc++6 (y si quieres tambien el las versiones nuevas) la cosa va como es realmente en windows, tu programa tiene un punto de entrada a partir del que se inicia y a partir de dicho punto debe crear las ventanas (CreateWindow y CreateWindowEx) y manejar los mensajes (casi como eventos en basic) que el usuario envia.
(me salto explicaciones de como se crean las ventanas, si dudas pregunta)
en el momento en el que registras el tipo de ventana que quieres -con RegisterClass() o RegisterClassEx()- debes especificar en la estructura que pasas como parametro (WNDCLASSEX) como atributo lpfnWndProc la direccion de una función que se encargue de manejar todos los "eventos" que puedas recibir
ejemplo
WNDCLASSEX wc;

wc.cbSize = sizeof(WNDCLASSEX);

wc.style = CS_HREDRAW | CS_VREDRAW;

wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SMENU));
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = szWindowClass;
wc.hIconSm = LoadIcon(wc.hInstance, MAKEINTRESOURCE(IDI_SMALL));
 
atom = RegisterClassEx(&wc);
y como no, debemos definir la función de control (en mi caso WndProc)

Código: Seleccionar todo

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        int wmId, wmEvent;
	PAINTSTRUCT ps;
	HDC hdc;

	switch (message)
	{
	case WM_PAINT: //esto equivale al evento Paint de vb6
		hdc = BeginPaint(hWnd, &ps);
		// TODO: agregar código de dibujo aquí...
		EndPaint(hWnd, &ps);
		break;
	case WM_DESTROY: //y esto a unload (se ejecutará cuando se pulse el aspa roja, alt+f4 ...)
		PostQuitMessage(0); //en caso de unload, salimos del programa (no sale solo como en vb6)
		break;
	default:  //si el evento no es ninguno de los anteriores, llamamos a la funcion de control de eventos de windows y 
                    //que se ocupe ella de procesar la petición
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}
finalmente, para que nuestro programa no cree la ventana y se cierre, sino que quede esperando mensajes añadimos antes del return()

Código: Seleccionar todo

	// Bucle principal de mensajes:
	while (GetMessage(&msg, NULL, 0, 0))
	{
		if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	}
esto te resultará mas fácil si te bajas del site de microsoft el visual studio 2008 o 2010 (si es que no lo tienes).
No te recomiendo que hagas como muchos y te eches a lo facil con aplicaciones CLR que te simplifican la tarea de crear ventanas, pero te esconden como funcionan las cosas de verdad y no te permiten llamar apis(además, al igual que vb6, tienen una limitación de velocidad mayor). de todas formas podrian ser un buen atajo para programas sencillos.
Responder

Volver a “C/C++”