Cambiar cursor del mouse

Haz aquí tus consultas relacionadas con la programación gráfica.
Responder
Mensaje
Autor
End17
Mensajes: 1
Registrado: 10/04/2018 4:53 pm

Cambiar cursor del mouse

#1 Mensaje por End17 » 10/04/2018 4:58 pm

Hola soy nuevo aquí y pues les vengo a pedir ayuda a gente que sabe aun mas al respecto de C grafico
Pues el detalle es esto. Eh querido saber sobre como cambiar el cursor del mouse, o sea, poner una imagen o una figura geométrica como mouse, o sea, remplazar el mouse con otra figura, a como se hace en windows, si me pueden explicar o darme el código para asi entenderle muy bien, seria de buena ayuda, y bueno de antemano muchas gracias por leer esto :D :wink:

mollok
Mensajes: 467
Registrado: 30/01/2018 9:47 am
Ubicación: Mallorca, España

Re: Cambiar cursor del mouse

#2 Mensaje por mollok » 12/04/2018 8:19 am

No sé de programación de Windows, pero puedo darte algunas páginas para que busques información:
http://winapi.conclase.net/curso/?winfun=SetCursor
https://stackoverflow.com/questions/169 ... mouse-move
https://msdn.microsoft.com/es-es/librar ... s.85).aspx

A falta de que el foro vuelva a crecer con nuevos miembros que conozcan programación con Windows es lo más que te puedo ofrecer.
while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}

Avatar de Usuario
untio
Mensajes: 389
Registrado: 17/09/2008 9:35 am
Ubicación: Provincia de Almería
Contactar:

Re: Cambiar cursor del mouse

#3 Mensaje por untio » 11/09/2018 1:04 pm

Hola y perdonad porque me entrometa.

Para cambiar el cursor del raton en un programa de ventanas, creo que hay que hacer lo siguiente:

Cuando se define la clase de ventana, por curioso que parezca, se pasa como handle del cursor el valor NULL.

En el bucle de mensajes, hay que procesar el mensaje: WM_SETCURSOR, usar la función SetCursor del api de windows y devolver TRUE.

Tienes un medio ejemplo aqui:

https://www.gamedev.net/forums/topic/18 ... ouse-in-c/

De nada.

Avatar de Usuario
untio
Mensajes: 389
Registrado: 17/09/2008 9:35 am
Ubicación: Provincia de Almería
Contactar:

Re: Cambiar cursor del mouse

#4 Mensaje por untio » 29/03/2019 2:24 pm

Hola de nuevo.

He descargado el dev-c++ portable y he modificado el código que viene por defecto para un programa de ventana de Windows 32 api. He añadido alguna explicación.

Ahí va:

Código: Seleccionar todo

#include <windows.h>

/* This is where all the input to the window goes to */
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
	
	//ESTAS VARIABLES LAS HE DEFINIDO YO
	static HCURSOR hcur1;
	static HCURSOR hcur2;
	RECT rec;
	POINT pun;
	switch(Message) {
		
		//EN ESTE MENSAJE CARGO LOS DOS CURSORES QUE PERTENECEN AL SISTEMA
		case WM_CREATE: {
			hcur1 = LoadCursor(NULL, IDC_SIZEWE);
			hcur2 = LoadCursor(NULL, IDC_SIZENS);
			if((hcur1 == NULL) || (hcur2 == NULL))
				MessageBox(hwnd, "No se han podido cargar los cursores del ratón", "Ha ocurrido un error", MB_OK);
			return 0;
		}
		
		//PONGO UN CURSOR U OTRO DEPENDIENDO DE EN QUE MITAD DE LA VENTANA ESTA EL CURSOR
		case WM_SETCURSOR: {
			GetClientRect(hwnd, &rec);
			GetCursorPos(&pun);
			ScreenToClient(hwnd, &pun);
			if(pun.x > rec.right / 2)
				SetCursor(hcur2);
			else
				SetCursor(hcur1);
			return TRUE;
		}
		
		/* Upon destruction, tell the main thread to stop */
		case WM_DESTROY: {
			PostQuitMessage(0);
			break;
		}
		
		/* All other messages (a lot of them) are processed using default procedures */
		default:
			return DefWindowProc(hwnd, Message, wParam, lParam);
	}
	return 0;
}

/* The 'main' function of Win32 GUI programs: this is where execution starts */
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
	WNDCLASSEX wc; /* A properties struct of our window */
	HWND hwnd; /* A 'HANDLE', hence the H, or a pointer to our window */
	MSG msg; /* A temporary location for all messages */

	/* zero out the struct and set the stuff we want to modify */
	memset(&wc,0,sizeof(wc));
	wc.cbSize		 = sizeof(WNDCLASSEX);
	wc.lpfnWndProc	 = WndProc; /* This is where we will send messages to */
	wc.hInstance	 = hInstance;
	
	//LA SIGUIENTE LINEA ES MUY IMPORTANTE:
	wc.hCursor		 = NULL;// LoadCursor(NULL, IDC_ARROW); Esto lo comento y lo pongo a NULL
	//LA LINEA ANTERIOR ES CLAVE PARA PODER CAMBIAR EL CURSOR
	
	
	
	/* White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it */
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
	wc.lpszClassName = "WindowClass";
	wc.hIcon		 = LoadIcon(NULL, IDI_APPLICATION); /* Load a standard icon */
	wc.hIconSm		 = LoadIcon(NULL, IDI_APPLICATION); /* use the name "A" to use the project icon */

	if(!RegisterClassEx(&wc)) {
		MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
		return 0;
	}

	hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Caption",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, /* x */
		CW_USEDEFAULT, /* y */
		640, /* width */
		480, /* height */
		NULL,NULL,hInstance,NULL);

	if(hwnd == NULL) {
		MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
		return 0;
	}

	/*
		This is the heart of our program where all input is processed and 
		sent to WndProc. Note that GetMessage blocks code flow until it receives something, so
		this loop will not produce unreasonably high CPU usage
	*/
	while(GetMessage(&msg, NULL, 0, 0) > 0) { /* If no error is received... */
		TranslateMessage(&msg); /* Translate key codes to chars if present */
		DispatchMessage(&msg); /* Send it to WndProc */
	}
	return msg.wParam;
}
Espero que sepáis perdonar mis más que posibles errores.

raymonmith
Mensajes: 1
Registrado: 30/03/2019 6:29 pm

Re: Cambiar cursor del mouse

#5 Mensaje por raymonmith » 30/03/2019 6:33 pm

Buen tema para compartir, bastante interesante.
GoMovies

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado