2012-07-09 43 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

相關問題