• DirectInput输入——鼠标设备


    //主DInput COM对象
    LPDIRECTINPUT8 lpdi = NULL;
    //键盘设备
    LPDIRECTINPUTDEVICE8 lpdimouse = NULL;
    //获取的鼠标数据放在此结构中
    DIMOUSESTATE mouse_state; 
    
    int DInput_Init_Mouse(void);
    int DInput_Read_Mouse(void);
    void DInput_Release_Mouse(void);
    
    //初始化鼠标设备
    int DInput_Init_Mouse(void)
    {
    	//创建鼠标设备
    	if (lpdi->CreateDevice(GUID_SysMouse, &lpdimouse, NULL)!=DI_OK)
    		return(0);
    
    	//设置鼠标协作等级,设置为后台/非独占模式
    	if (lpdimouse->SetCooperativeLevel(main_window_handle, DISCL_NONEXCLUSIVE | DISCL_BACKGROUND)!=DI_OK)
    		return(0);
    
    	//设置数据格式,鼠标对应的数据格式为c_dfDIMouse
    	if (lpdimouse->SetDataFormat(&c_dfDIMouse)!=DI_OK)
    		return(0);
    
    	//获取鼠标
    	if (lpdimouse->Acquire()!=DI_OK)
    		return(0);
    }
    
    //从鼠标读取数据
    int DInput_Read_Mouse(void)
    {
    	//读取鼠标数据
    	if (lpdimouse)    
    	{
    		if (lpdimouse->GetDeviceState(sizeof(DIMOUSESTATE), (LPVOID)&mouse_state)!=DI_OK)
    			return(0);
    	}
    	else
    	{
    		//如果没有插入鼠标,则将鼠标数据结构置为0
    		memset(&mouse_state,0,sizeof(mouse_state));
    		return(0);
    	}
    	return(1);
    }
    
    //释放鼠标
    void DInput_Release_Mouse(void)
    {
    	if (lpdimouse)
    	{    
    		lpdimouse->Unacquire();
    		lpdimouse->Release();
    	} 
    } 
    
    	//主Game循环中
    	DInput_Read_Mouse();
    	if(mouse_state.rgbButtons[0] & 0x80) //左键是否按下
    	{
    		int i = 0;
    	}
    	mouse_state.lx;				///鼠标横向移动的距离
    	mouse_state.ly;				///鼠标纵向移动的距离
    	mouse_state.rgbButtons[0];	///鼠标左键是否按下
    	mouse_state.rgbButtons[1];	///鼠标右键是否按下
    	mouse_state.rgbButtons[2];	///鼠标中键是否按下
    

  • 相关阅读:
    终端操作各插件安装配置
    浅谈CSRF攻击方式
    教你突破基于HTTP_REFERER的防盗链的方法
    HTTP Referer简介
    如何利用百度蜘蛛referer找到报错页面入口?
    Flex 布局教程:语法
    HTTP 状态码
    RESTful API 设计最佳实践
    Javascript原型和原型链
    JS判断是什么设备是什么浏览器-主要用移动页面开发
  • 原文地址:https://www.cnblogs.com/sifenkesi/p/1946388.html
Copyright © 2020-2023  润新知