2012-07-09 39 views
1

我将directx嵌入到我的应用程序的子窗口中,并希望仅当它位于客户区域时隐藏窗口光标。我知道如何在一般情况下隐藏光标,并且如果仅在不显示任何客户区域时显示光标,才设法找到一个移动示例,但对此没有帮助。 如何仅在光标位于特定客户区域(/子窗口)时才隐藏光标?将鼠标光标隐藏在窗口中的特定客户区域

编辑: 这是接近我已经得到了,但是光标闪烁不可预知的(如鼠标移动),而在DX区域

case WM_SETCURSOR: 
{ 
    static bool bCursorVisible = TRUE; 

    if(hWnd!=hwD3DArea && !bCursorVisible) 
    { 
     ShowCursor((bCursorVisible=TRUE)); 
    } 
    else if(hWnd==hwD3DArea && bCursorVisible) 
    { 
     ShowCursor((bCursorVisible=FALSE)); 
     return TRUE; 
    } 
} 
break; 

EDIT2: AHAH! 你必须使用wParam中,而不是在的hWnd此消息 这里的工作代码:

case WM_SETCURSOR: 
{ 
    static bool bCursorVisible = TRUE; 

    if(((HWND)wParam)!=hwD3DArea && !bCursorVisible) 
    { 
     ShowCursor((bCursorVisible=TRUE)); 
    } 
    else if(((HWND)wParam)==hwD3DArea && bCursorVisible) 
    { 
     ShowCursor((bCursorVisible=FALSE)); 
     return TRUE; 
    } 
} 
break; 

回答

1

修复:

case WM_SETCURSOR: 
     { 
      static bool bCursorVisible = TRUE; 
      if(((HWND)wParam)!=hwD3DArea && !bCursorVisible) 
      { 
       ShowCursor((bCursorVisible=TRUE)); 
      } 
      else if(((HWND)wParam)==hwD3DArea && bCursorVisible) 
      { 
       ShowCursor((bCursorVisible=FALSE)); 
       return TRUE; 
      } 
     } 
     break; 

我是在正确的轨道上,但使用的hWnd时,我应该使用的wParam(持有窗口光标在真正的手柄)

1

我觉得如果你只是设置光标为特定的客户端窗口为空光标会比较简单。

+0

,它不起作用,因为它似乎是画一个小东西,然后用指针覆盖它,如果你推出然后又回来(这是我第一次尝试。)我找到了一个解决方案。将尽快添加信息。 – user980058 2012-07-09 12:15:20

1
case WM_SETCURSOR: 
{ 
    if (LOWORD(lParam) == HTCLIENT) 
    { 
     SetCursor(NULL); 
     return TRUE; 
    } 

    return DefWindowProc(hWnd, msg, wParam, lParam); 
} 
+0

请解释为什么这会有所帮助。 – 2015-02-05 15:34:12

+0

该测试解决了“实际客户区”的问题。 在编写窗口化的DX应用程序时,始终隐藏光标是一种常见的错误,这使得调整窗口大小,移动或关闭窗口非常困难(因为您看不到光标)。 直接调用DefWindowProc只是确保默认窗口过程被调用的方式(因为它会处理那些移动/大小/关闭情况下的光标更改) – 2015-04-09 13:15:00

相关问题