Blame | Last modification | View Log | Download
/**************************************************************** Object : pvb_util.dll** File : mouse.c** Purpose : Mouse handling for FactoyyLink, usage of functions* with PVB.***************************************************************/#include <stdlib.h>#include <stdio.h>#include <windows.h>#include <resource.h>#include <time.h>/** Global variables*/short pvb_mouse_init = 0;HINSTANCE pvb_mouse_lib = NULL;HWND cur_hwnd = NULL;short act_cur_type = 0, /* actual cursor type */prev_cur_type = 0; /* previous cursor type */HCURSOR pvb_mouse_cur[ 20] = {NULL, NULL, NULL, NULL, NULL,NULL, NULL, NULL, NULL, NULL,NULL, NULL, NULL, NULL, NULL,NULL, NULL, NULL, NULL, NULL};extern HINSTANCE hinstDLL;/**************************************************************** Function: short WINAPI pvb_init_cursor( char *title)** Purpose : Initialise handling of the mouse cursor, first* save the default cursor. Load the default OS* cursors.** Return : 0 - Success* -1 - Failure**************************************************************/short WINAPI pvb_init_cursor( char *title){short ret = 0;short t = 1;/* check if init is already done */if (pvb_mouse_init)return ret;/* mark initialisation */pvb_mouse_init = 1;/* actual cursor type */act_cur_type = 0;/* previous cursor type */prev_cur_type = 0;/* save the deafult cursor for the window class *//* check if a window title is specified */if (title == NULL)t = 0;else{if (!strlen( title))t = 0;}if (!t)cur_hwnd = GetActiveWindow();elsecur_hwnd = FindWindow( NULL, title);if (cur_hwnd != NULL){if ((pvb_mouse_cur[ 0] = (HCURSOR)(GetClassLong( cur_hwnd, GCL_HCURSOR))) == NULL)pvb_mouse_cur[ 0] = LoadCursor( NULL, IDC_ARROW);}elsepvb_mouse_cur[ 0] = LoadCursor( NULL, IDC_ARROW);/* load all the standard mouse cursors */pvb_mouse_cur[ 1] = LoadCursor( NULL, IDC_ARROW);pvb_mouse_cur[ 2] = LoadCursor( NULL, IDC_APPSTARTING);pvb_mouse_cur[ 3] = LoadCursor( NULL, IDC_SIZEALL);pvb_mouse_cur[ 4] = LoadCursor( NULL, IDC_WAIT);pvb_mouse_cur[ 5] = LoadCursor( NULL, IDC_HELP);pvb_mouse_cur[ 6] = LoadCursor( NULL, IDC_CROSS);pvb_mouse_cur[ 7] = LoadCursor( NULL, IDC_NO);pvb_mouse_cur[ 8] = LoadCursor( NULL, IDC_SIZENESW);pvb_mouse_cur[ 9] = LoadCursor( NULL, IDC_SIZENS);pvb_mouse_cur[ 10] = LoadCursor( NULL, IDC_SIZENWSE);pvb_mouse_cur[ 11] = LoadCursor( NULL, IDC_SIZEWE);pvb_mouse_cur[ 12] = LoadCursor( NULL, IDC_UPARROW);pvb_mouse_cur[ 13] = LoadCursor( NULL, IDC_IBEAM);pvb_mouse_cur[ 14] = LoadCursor( NULL, IDC_SIZE);pvb_mouse_cur[ 15] = LoadCursor( NULL, IDC_ICON);pvb_mouse_cur[ 16] = LoadCursor( hinstDLL, MAKEINTRESOURCE( IDC_CURSOR1));pvb_mouse_cur[ 17] = LoadCursor( hinstDLL, MAKEINTRESOURCE( IDC_CURSOR2));pvb_mouse_cur[ 18] = LoadCursor( hinstDLL, MAKEINTRESOURCE( IDC_CURSOR3));pvb_mouse_cur[ 19] = LoadCursor( hinstDLL, MAKEINTRESOURCE( IDC_CURSOR4));return ret;} /* pvb_init_cursor *//**************************************************************** Function: short WINAPI pvb_set_cursor( short type)** Purpose : Set a new cursor type.* 0 = default* 1 = IDC_ARROW* 2 = IDC_APPSTARTING* 3 = IDC_SIZEALL* 4 = IDC_WAIT* 5 = IDC_CROSS* 6 = IDC_NO* 7 = IDC_SIZENESW* 8 = IDC_SIZENS* 9 = IDC_SIZENWSE* 10 = IDC_SIZEWE* 11 = IDC_UPARROW* 12 = IDC_IBEAM* 13 = IDC_SIZE* 14 = IDC_ICON** Return : 0 - Success* -1 - Failure**************************************************************/short WINAPI pvb_set_cursor( short type){HCURSOR hcur = NULL;short ret = 0;short old = 0;/* check for initialisation */if (!pvb_mouse_init){if (pvb_init_cursor( NULL))return -1;}/* restore previous setting */if (type == -1)type = prev_cur_type;/* set new previous type */old = act_cur_type;/* set the desired cursor, as the default for the window class */switch (type){case 0:/* default cursor */if (pvb_mouse_cur[ 0] != NULL)hcur = pvb_mouse_cur[ 0];else{if ((hcur = LoadCursor( NULL, IDC_ARROW)) == NULL)ret = -1;}act_cur_type = type;break;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:/* user defined cursor */if ((pvb_mouse_cur[ type]) != NULL){hcur = pvb_mouse_cur[ type];act_cur_type = type;}elseret = -1;break;default:ret = -1;break;}/* if we have succes, do the actual change of cursor shape */if (!ret){//assume that all windows are created with th esame classSetClassLong( cur_hwnd, GCL_HCURSOR, (LONG)hcur);SetCursor( hcur);prev_cur_type = old;}return ret;} /* pvb_set_cursor *//**************************************************************** Function: short WINAPI pvb_get_cursor( void)** Purpose : Get the actul cursor type, zero is returned, if* not set by 'pvb_set_cursor'.** Return: 0 = default* 1 = IDC_ARROW* 2 = IDC_APPSTARTING* 3 = IDC_SIZEALL* 4 = IDC_WAIT* 5 = IDC_CROSS* 6 = IDC_NO* 7 = IDC_SIZENESW* 8 = IDC_SIZENS* 9 = IDC_SIZENWSE* 10 = IDC_SIZEWE* 11 = IDC_UPARROW* 12 = IDC_IBEAM* 13 = IDC_SIZE* 14 = IDC_ICON**************************************************************/short WINAPI pvb_get_cursor( void){/* return the last type set */return act_cur_type;} /* pvb_get_cursor *//**************************************************************** Function: short WINAPI pvb_exit_cursor( void)** Purpose : Exitst the handing of the mouse cursor.** Return : 0 - Success* -1 - Failure**************************************************************/short WINAPI pvb_exit_cursor( void){/* restore default cursor */pvb_set_cursor( 0);memset( pvb_mouse_cur, 0, sizeof( HCURSOR) * 20);cur_hwnd = NULL;pvb_mouse_init = 0;return 0;}void force_mouse_position( HWND hWnd){//retrieve mouse position//send mouse position//LRESULT SendMessage( hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);}