游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2121|回复: 0

求教一个关于DirectInput的问题~~~~~

[复制链接]

1

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2010-10-26 13:21:00 | 显示全部楼层 |阅读模式
我写了一个初始化DirectInput的函数放在类里面
可是运行产生很多错误,
首先就是m_Keyboard->Acquire()一直返回E_ACCESSDENIED

把m_Keyboard->Acquire()注释掉之后

m_Mouse->SetCooperativeLevel(m_hWnd, flags) 也发生问题
返回E_INVALIDARG

这几个宏定义的意思在SDK帮助文档里面也找不到,有没有高手帮我看看,谢谢了


bool CDirectInput::Initialize(HWND hWnd, HINSTANCE hInstance, bool mouseExclusive /* = false */)
{
        m_hWnd = hWnd;
        gThis = this;

        // 创建输入系统
        if (FAILED(DirectInput8Create(hInstance, DIRECTINPUT_VERSION,
                                                IID_IDirectInput8, (void **)&m_Input, NULL)))
        {
                return false;
        }

        // 初始化键盘
        if (FAILED(m_Input->CreateDevice(GUID_SysKeyboard, &m_Keyboard, NULL)))
                return false;

        if (FAILED(m_Keyboard->SetDataFormat(&c_dfDIKeyboard)))
                return false;

        if (FAILED(m_Keyboard->SetCooperativeLevel(m_hWnd,
                                        DISCL_FOREGROUND | DISCL_NONEXCLUSIVE)))
        {
                return false;
        }

        // 出错处1!!!!!!!!!!!!!
        //HRESULT hr;
        //hr = m_Keyboard->Acquire();
        if (FAILED(m_Keyboard->Acquire()))
        {
                MessageBox(m_hWnd, "无法获取键盘", "!!!", MB_OK);
                return false;
        }

        memset(m_Keys, 0, sizeof(m_Keys));

        // 初始化鼠标
        DWORD flags;

        if (FAILED(m_Input->CreateDevice(GUID_SysMouse, &m_Mouse, NULL)))
                return false;

        if (FAILED(m_Mouse->SetDataFormat(&c_dfDIMouse)))
                return false;

        if (mouseExclusive)
                flags = DISCL_FOREGROUND | DISCL_EXCLUSIVE | DISCL_NOWINKEY;
        else
                flags = DISCL_FOREGROUND | DISCL_NOWINKEY;

           // 出错处2!!!!!!
        //hr = m_Mouse->SetCooperativeLevel(m_hWnd, flags);
        if (FAILED(m_Mouse->SetCooperativeLevel(m_hWnd, flags)))
                return false;

        //m_Mouse->Acquire();
        if (FAILED(m_Mouse->Acquire()))
        {
                MessageBox(m_hWnd, "无法获取鼠标", "!!!", MB_OK);
                return false;
        }

        return true;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-18 08:26

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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