正在阅读:MFC下DirectX DirectInput的实现MFC下DirectX DirectInput的实现

2005-07-27 10:07 出处: 作者:苗苗 责任编辑:moningfeng

  然后在函数BOOL CDIJoystickDlg::OnInitDialog()的最后添加如下代码:

joystick.m_hWnd = m_hWnd; //首先获得窗口句柄

if(!joystick.Initialise()) //初始化

{

OutputDebugString("初始化游戏杆失败 - in CDIJoystickDlg::OnInitDialog\n");

OnCancel();

return FALSE;

}

SetTimer(1,50,NULL); //设置一个50毫秒定时器


  首先需要把窗口句柄赋值到m_hWnd中,因为在设置协作等级的时候需要用到这个句柄。然后进行初始化。最后设置一个50毫秒的定时器,它会产生WM_TIMER消息。

  在CDirectInputJSDlg类的属性框中点击重写标签添加CDirectInputJSDlg::OnCancel()函数。加入如下代码:

KillTimer(1); //销毁定时器

OutputDebugString("程序退出 - OnCancel()\n");


  在CDirectInputJSDlg类的属性框中点击消息标签,在WM_TIMER消息中选择添加OnTimer()函数,将下面代码写入函数:

char ch[20];

if(FAILED( joystick.PollDevice() ) ) //轮循

{

KillTimer( 1 );

MessageBox(TEXT("读取设备状态错误") \

TEXT("程序即将退出"), TEXT("DirectInput 示例"),

MB_ICONERROR | MB_OK );

}

if (joystick.m_diJs.lX < 0 )

OutputDebugString(" 方向左键按下 \n");

if (joystick.m_diJs.lX > 0 )

OutputDebugString(" 方向右键按下 \n");

if (joystick.m_diJs.lY < 0 )

OutputDebugString(" 方向上键按下 \n");

if (joystick.m_diJs.lY > 0 )

OutputDebugString(" 方向下键按下 \n");

for(int i = 0; i < 32 ; i++)

if (joystick.m_diJs.rgbButtons[i] & 0x80)

{

StringCchPrintf(ch,20,"按钮 %d 键按下\n",i);

OutputDebugString(ch);

}


  这里如果轮循失败,则销毁定时器,做出提示。然后判断joystick.m_diJs的各个成员。

  注意joystick.m_diJs.rgbButtons[i] & 0x80 ,判断手柄按钮的状态需要让它跟0x80相与。

  另外,如果要使用StringCchPrintf()函数,需要添加头文件,#include <strsafe.h>。

  现在离完成仅仅剩一步之遥了,你需要的是对环境的设置。

  右键点击工程,选择属性,在链接器,输入选项框中的附加依赖项中添加如下的库:

  dxguid.lib dxerr9.lib dinput8.lib comctl32.lib


  然后在菜单栏工具中选择选项,项目,VC++目录选项框中添加SDK的包含文件目录和库文件目录。

  最后你可以编译你的程序看看是否成功。在Debug模式下,可以在调试栏中看到输出信息。

  嗯,基本上就是这样。如果你需要对手柄的输入做更多的输出,那么你可以费费心思设计更好的程序。
键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品