游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1613|回复: 3

问一个DirectInput应用的小问题

[复制链接]

48

主题

142

帖子

142

积分

注册会员

Rank: 2

积分
142
发表于 2007-7-22 22:58:00 | 显示全部楼层 |阅读模式
下面是来自樊一鹏先生的<<DirectInput 鼠标编程入门>>中的代码片段
HRESULT UpdateInputState(void)
{
    DWORD   i;

    if(lpMouse != NULL)
    {
        DIDEVICEOBJECTDATA  didod;  // Receives buffered data
        DWORD               dwElements;
        HRESULT             hr;

        while(TRUE)
        {
            dwElements = 1;                     // 每次从缓冲区中读一个数据
            hr = lpMouse->GetDeviceData(sizeof(DIDEVICEOBJECTDATA), &didod, &dwElements, 0);

            if FAILED(hr)
            {
                // 发生了一个错误
                if(hr == DIERR_INPUTLOST)
                {
                    hr = lpMouse->Acquire();    // 试图重新取回设备
                    if FAILED(hr)
                    {
                        return S_FALSE;         // 失败
                    }
                }
            }
            else
                if(elements == 1)
                {
                    switch(didod.dwOfs)
                    {
                    case DIMOFS_X:              // X 轴偏移量
                        // didod.dwData 里是具体偏移相对值,单位为像素
                        g_pCamera->walk(12.00f);
                                                g_pCamera->getViewMatrix(&matView);
                                                break;
                    case DIMOFS_Y:              // Y 轴偏移量
                        // didod.dwData 里是具体偏移相对值,单位为像素
                        g_pCamera->yaw(1.0f);
                                                g_pCamera->getViewMatrix(&matView);
                                                break;
                    case DIMOFS_BUTTON0:        // 0 号键(左键)状态
                        // didod.dwData 里是具体状态值
                        // 低字节最高位为 1 则表示按下
                        // 低字节最高位为 0 表示未按下
                        break;
                    case DIMOFS_BUTTON1:        // 1 号键(右键)状态
                        // 同上
                        break;
                    case DIMOFS_BUTTON2:        // 2 号键(中键)状态
                        // 同上
                        break;
                    case DIMOFS_BUTTON3:        // 3 号键状态
                        // 同上
                        break;
                    }
                }
            else if (elements== 0) break;      // 缓冲区读空
        }
    }

    return S_OK;
}
其中的elements不知是什么成员,偶不懂,原文没有声明.
诸位帮忙看看这是那路神仙.

5

主题

755

帖子

757

积分

高级会员

Rank: 4

积分
757
发表于 2007-7-23 17:04:00 | 显示全部楼层

Re:问一个DirectInput应用的小问题

dwElements  估计是这个

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2007-7-23 17:10:00 | 显示全部楼层

Re:问一个DirectInput应用的小问题

就是dwElements。

48

主题

142

帖子

142

积分

注册会员

Rank: 2

积分
142
 楼主| 发表于 2007-7-24 13:44:00 | 显示全部楼层

Re:问一个DirectInput应用的小问题

不知dwElements在此的用意是什么,难道GetDeviceData(sizeof(DIDEVICEOBJECTDATA), &didod, &dwElements, 0)会改变它的值么?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 18:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表