Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8308684
  • 博文数量: 1413
  • 博客积分: 11128
  • 博客等级: 上将
  • 技术积分: 14685
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-13 10:03
个人简介

follow my heart...

文章分类

全部博文(1413)

文章存档

2013年(1)

2012年(5)

2011年(45)

2010年(176)

2009年(148)

2008年(190)

2007年(293)

2006年(555)

分类:

2006-11-24 23:32:59

在使用vc2003进行DirectInput编程,其中DirectX SDK使用的是系统默认的版本8.0,操作系统环境为WINXP SP2.
在进行编程中发现并解决了以下问题:
1、库文件及头文件
在vc2003中要加入头文件#i nclude
还有库文件应该是dinput8.lib ,而不是dinput.lib
2、变量的声明,如
LPDIRECTINPUT8 pDI;
LPDIRECTINPUTDEVICE8 lpMouse;
3、DirectInput的初始化
bool InitInput()
{
HRESULT hres;
hres=DirectInput8Create(hInst, DIRECTINPUT_VERSION, IID_IDirectInput8, (LPVOID *)&pDI, NULL);
if(FAILED(hres))
return FALSE;

hres = pDI->CreateDevice(GUID_SysMouse, &lpMouse,NULL);
if(FAILED(hres))
return FALSE;

hres = lpMouse->SetDataFormat(&c_dfDIMouse);
if(FAILED(hres))
return FALSE;

hres = lpMouse->SetCooperativeLevel(hWnd,DISCL_EXCLUSIVE | DISCL_FOREGROUND);
if(FAILED(hres))
return FALSE;

hMouseEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
if(!hMouseEvent)
return FALSE;

hres = lpMouse->SetEventNotification(hMouseEvent);
if(FAILED(hres))
return FALSE;

DIPROPDWORD dipdw;
dipdw.diph.dwSize = sizeof(DIPROPDWORD);
dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER);
dipdw.diph.dwObj = 0;
dipdw.diph.dwHow = DIPH_DEVICE;
//dipdw.dwData=MOUSE_SAMPLEBUFFER; // 预定义为16
dipdw.dwData=16; // 预定义为16
hres = lpMouse->SetProperty(DIPROP_BUFFERSIZE,&dipdw.diph);
if(FAILED(hres))
return FALSE;

lpMouse->Acquire();

return TRUE;
}

4、使用鼠标
void MouseEvent()
{
DIDEVICEOBJECTDATA od;
HRESULT hres;
DWORD count;
short x = 0,y = 0;
while(1)
{
count = 1;
hres =lpMouse->GetDeviceData(sizeof(DIDEVICEOBJECTDATA), &od,&count, 0);
if(hres == DIERR_INPUTLOST)
{
lpMouse->Acquire();
return;
}

if(FAILED(hres) || !count)
break;

switch(od.dwOfs)
{
case DIMOFS_X:
x += (short)od.dwData;
break;
case DIMOFS_Y:
y += (short)od.dwData;
break;
//物理设备上左键或右键按下/释放,如有左右键交换可是要自己判断的
case DIMOFS_BUTTON0:
MessageBox(hWnd,"abcdfsfds","df",0);
case DIMOFS_BUTTON1:
//if(od.dwData & 0x80)
// 键按下
//…………
//else
// 键释放
//…………    
; }
}

if(x || y)
{
//MouseX += x;
//MouseY += y;
// 决定光标的位置以及是否卷屏等等
//…………
//lpDevice->SetCursorPosition(MouseX, MouseY,D3DCURSOR_IMMEDIATE_UPDATE);
}
}

阅读(2814) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-03-20 21:06:37

你好!看了你的网站我非常欣赏你的人生。想向你请教几个问题:我想对游戏方向盘做力反馈编程, 却找不到突破口,我这里有saitek和罗技的力反馈方向盘,却不知从何下手,大侠能不能指点一二,感激不已。