游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2916|回复: 8

关于鼠标指针隐藏的奇怪问题

[复制链接]

26

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2006-9-13 00:12:00 | 显示全部楼层 |阅读模式
一个win32例子程序.程序里并没有加"ShowCursor(FALSE);",但运行的时候却隐藏了鼠标指针,不明白是在哪里设置了.莫非是创建窗口的时候设置了?请大虾帮忙看看啦.为什么.

// 注册窗口类
bool COGLWindow::RegisterWindow(HINSTANCE hInst)
{
        WNDCLASS windowClass;                // 窗口类

        windowClass.style                 = 0;
        windowClass.lpfnWndProc         = WndProcOGL;
        windowClass.cbClsExtra         = 0;
        windowClass.cbWndExtra         = 0;
        windowClass.hInstance         = hInst;
        windowClass.hIcon                 = 0;
        windowClass.hCursor                 = LoadCursor(NULL, IDC_ARROW);
        windowClass.hbrBackground = NULL;
        windowClass.lpszMenuName         = NULL;
        windowClass.lpszClassName = "Engine";
        // 注册窗口类
        if (!RegisterClass(&windowClass))
                return false;

        return true;
}

////////
// 构造函数
COGLWindow::COGLWindow(const char *szName, bool fscreen, int w, int h, int b)
{
        RECT windowRect;
        DWORD dwStyle;
        DWORD dwExStyle;

        fullscreen = fscreen;
        width = w;
        height = h;
        bits = b;

        windowRect.left = (long)0;
        windowRect.right = (long)width;
        windowRect.top = (long)0;
        windowRect.bottom = (long)height;

        if (fullscreen)
        {
                dwExStyle = WS_EX_APPWINDOW;
                dwStyle = WS_POPUP;
        }
        else
        {
                dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
                dwStyle = WS_OVERLAPPEDWINDOW;
        }

        AdjustWindowRectEx(&windowRect, dwStyle, FALSE, dwExStyle);
       
        // 创建窗口
        if (fullscreen)
        {
                BeginFullScreen(width, height, bits);
                hWnd = CreateWindowEx(NULL, "Engine", szName, dwStyle | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
                                                  0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN),
                                                  NULL, NULL, (HINSTANCE)GetModuleHandle(NULL), (void*)this);
        }
        else
        {

                hWnd = CreateWindowEx(NULL, "Engine", szName, dwStyle | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
                                                  0, 0, width, height, NULL, NULL, (HINSTANCE)GetModuleHandle(NULL),(void*)this);
        }

        if (hWnd == NULL)
                throw "ERROR: Creating OpenGL Window!";

        ShowWindow(hWnd, SW_SHOW);
        UpdateWindow(hWnd);

        mouseSensitivity = 1.0f;

        inputSystem = new CInputSystem;
        useDInput = inputSystem->Initialize(hWnd, (HINSTANCE)GetModuleHandle(NULL), true, IS_USEKEYBOARD | IS_USEMOUSE);

        SetForegroundWindow(hWnd);
        SetCapture(hWnd);
        SetFocus(hWnd);

        if (useDInput)
        {
                inputSystem->AcquireAll();
                inputSystem->Update();
        }

        ShowCursor(TRUE);
}

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2006-9-13 12:35:00 | 显示全部楼层

Re:关于鼠标指针隐藏的奇怪问题

看这些:
-----------------------------------------------------------------
inputSystem = new CInputSystem;
useDInput = inputSystem->Initialize(hWnd, (HINSTANCE)GetModuleHandle(NULL), true, IS_USEKEYBOARD | IS_USEMOUSE);

SetForegroundWindow(hWnd);
SetCapture(hWnd);
SetFocus(hWnd);

if (useDInput)
{
inputSystem->AcquireAll();
inputSystem->Update();
}
----------------------------------------------------------------------
估计是这些,它有自己的输入系统,或许里面有ShowCursor等效的东西

26

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
 楼主| 发表于 2006-9-13 18:38:00 | 显示全部楼层

Re:关于鼠标指针隐藏的奇怪问题

哦!!!谢了老兄~

26

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
 楼主| 发表于 2006-9-13 19:13:00 | 显示全部楼层

Re:关于鼠标指针隐藏的奇怪问题

还是不知道哪里设置了哦,相关的INPUT设置都在这了,~还是找不到哪里设置了隐藏鼠标指针.
CMouse::CMouse(LPDIRECTINPUT8 pDI, HWND hwnd, bool isExclusive)
{
        if (FAILED(pDI->CreateDevice(GUID_SysMouse, &m_pDIDev, NULL)))
        {
                // 错误处理
        }
        if (FAILED(m_pDIDev->SetDataFormat(&c_dfDIMouse)))
        {
                // 错误处理
        }
        DWORD flags;
        if (isExclusive)
                flags = DISCL_FOREGROUND | DISCL_EXCLUSIVE | DISCL_NOWINKEY;
                //flags = DISCL_FOREGROUND | DISCL_NONEXCLUSIVE;
        else
                flags = DISCL_FOREGROUND | DISCL_NONEXCLUSIVE;

        if (FAILED(m_pDIDev->SetCooperativeLevel(hwnd, flags)))
        {
                // 错误处理
        }
        if (FAILED(m_pDIDev->Acquire()))
        {
                // 错误处理
        }
        if (FAILED(m_pDIDev->GetDeviceState(sizeof(DIMOUSESTATE), &m_state)))
        {
                // 错误处理
        }
}

bool CMouse::Update()
{
        if (FAILED(m_pDIDev->GetDeviceState(sizeof(DIMOUSESTATE), &m_state)))
        {
                if (FAILED(m_pDIDev->Acquire()))
                {
                        return false;
                }
                if (FAILED(m_pDIDev->GetDeviceState(sizeof(DIMOUSESTATE), &m_state)))
                {
                        return false;
                }
        }
        return true;
}

CMouse::~CMouse()
{
        if (m_pDIDev)
        {
                m_pDIDev->Unacquire();
                m_pDIDev->Release();
        }
}

bool CMouse::Acquire()
{
        return (!FAILED(m_pDIDev->Acquire()));
}

bool CMouse::Unacquire()
{
        return (!FAILED(m_pDIDev->Unacquire()));
}

bool CInputSystem::Initialize(HWND hwnd, HINSTANCE appInstance, bool isExclusive, DWORD flags)
{
        if (FAILED(DirectInput8Create(appInstance,
                               DIRECTINPUT_VERSION,
                               IID_IDirectInput8,
                               (void **)&m_pDI,
                               NULL)))
    return false;

        if (flags & IS_USEKEYBOARD)
        {
                m_pKeyboard = new CKeyboard(m_pDI, hwnd);
        }
        if (flags & IS_USEMOUSE)
        {
                m_pMouse = new CMouse(m_pDI, hwnd, true);
        }
        if (flags & IS_USEJOYSTICK)
        {
                m_pJoystick = new CJoystick(m_pDI, appInstance);
        }
        return true;
}

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2006-9-13 22:16:00 | 显示全部楼层

Re:关于鼠标指针隐藏的奇怪问题

它用了DirectInput,所以指针是隐藏的

26

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
 楼主| 发表于 2006-9-14 01:13:00 | 显示全部楼层

Re:关于鼠标指针隐藏的奇怪问题

哎~`晕了哦~,
只要用了DirectInput,鼠标指针就一定隐藏么!没办法设置?

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2006-9-14 12:32:00 | 显示全部楼层

Re:关于鼠标指针隐藏的奇怪问题

似乎(确实)是的
设置?这个我不清楚,我认为不能了

26

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
 楼主| 发表于 2006-9-14 15:08:00 | 显示全部楼层

Re:关于鼠标指针隐藏的奇怪问题

哦!!好~谢了~

5

主题

263

帖子

1113

积分

金牌会员

Rank: 6Rank: 6

积分
1113
发表于 2010-10-22 17:07:00 | 显示全部楼层

Re:关于鼠标指针隐藏的奇怪问题

那么怎样不使用DirectXInput就可以隐藏鼠标指针呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-3 05:35

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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