2012-01-23 4 views
1

저는 DX11 게임을하고 있으며 전체 화면 모드에서 전체 화면 모드로 커서를 이동하려고합니다. 이 방법을 사용합니다.ClipCursor가 작동하지 않습니다.


void MyClass::_SetupCursor(BOOL bFullscreen) { 
    // Clip cursor if requested 
    if(bFullscreen) { 
     if(m_bShowCursorWhenFullscreen) { 
      ShowCursor(m_bShowCursorWhenFullscreen); 
     } 
     if(m_bClipCursorWhenFullscreen) { 
      // Confine cursor to full screen window 
      RECT windowRect; 
      GetWindowRect(m_hWnd, &windowRect); 
      ClipCursor(&windowRect); 
     } 
    } 
    else { 
     ShowCursor(TRUE); 
     ClipCursor(NULL); 
    } 
} 

그러나 전체 모니터 모드에서 2 대의 모니터를 사용할 경우 다른 모니터로 마우스를 이동할 수 있습니다. 해상도를 전체 화면 모드에서 2048x1152로 설정하면 창 사각형이 1360x768로 표시되고 잘라내 기는됩니다. GetClippedRect를 사용하여 클리핑 된 것을 확인합니다.

1) 당사 마우스 내 창에있는 모니터에 클립 점점되지 않습니다

그래서 나는이 개 질문이?

2) 모니터가 2048x1152이고 2048x1152로 설정되어 있다는 사실을 알고있는 경우 왜 창 사각형이 1360x768로 측정됩니까?

+0

커서를 숨기는 대신 왜 자르려고합니까? –

+0

@CodyGray 클리핑되지 않으면 커서를 숨길 필요가 없습니다 ... 커서가 전체 화면 창에 있어야합니다. 많은 게임이이 기능을 가지고 있습니다. 그렇습니다. 나는 윈도우 커서를 숨기고 있지만 실제로 커서를 다른 것으로 바꾸지 않습니다. 커서를 아직 바꾸지 않았습니다. – Darkhydro

+0

이 함수 호출을 완전히 피하십시오. 커서를 직접 에뮬레이션해야합니다. 그 이유는 응용 프로그램이 불분명하게 종료되는 경우 (segfault/exception/access violation/whatever) Windows가 클립 범위를 유지할 것이기 때문입니다 (적어도 <= Windows XP가 수행 한 것). 만약 당신이 절대적으로 원하는 시스템 커서를 경계 검사를 포함하고'SetCursorPosition'를 대신 사용하십시오. –

답변

3

ClipCursor가 작동하려면 모든 DX11 버퍼와 창 크기가 정확해야합니다. 나는 이것을 풀 스크린으로 풀어서 내 응용 프로그램을 실행하고, 여러 모니터를 사용해도 괜찮았다. ClipCursor 실패 할 경우 자세한 내용은 stackoverflow 내 다른 질문을 체크 : Why is D3D10SDKLayers.dll loaded during my DX11 game?.

ClipCursor는 내가 그 문제에서 설명하는 상황이 발생할 때마다 실패합니다. 또한, 내 두 번째 질문에 대한 응답으로, 내가 연결된 질문에 설명하기 때문에 창 크기가 잘못되었습니다.

0

불행히도 (사용자가) documentation에 대한 의견에 따르면, 이것은 다중 모니터 설정에 대해 작동하지 않는 것으로 보입니다. 화면 밖으로 나왔을 때 마우스의 위치를 ​​바꾸고, 마우스의 움직임을 없애고, 커서를 다시 창으로 옮길 때 다시 켜는 메소드를 개발할 수도 있습니다 (마우스가 윈도우 밖으로 이동했는지 감지 할 수 있습니다. 아니, 거기에 대한 Windows 메시지가 있습니다).

+0

필자가 보았던 DX11 샘플 중 일부가 여러 모니터를 사용하여 커서를 올바르게 클립 링하기 때문에이 것을 받아들이는 것을 주저합니다. 또한 http://msdn.microsoft.com/en-us/library/windows/desktop/ms648383(v=vs.85).aspx는 멀티몬에서 지원되지 않는다고 말하지 않습니다. – Darkhydro

+0

DX11 샘플은 ClipCursor 이외의 것으로 커서를 클리핑하는 추가 API (DXUT)를 사용합니다. 아마도 그들이하고있는 뭔가가 더있을 것입니다. – josephthomas

+0

아니요, 저는 DXUT과 같은 일을하고 있습니다. 도와 줘서 고마워,이게 내가 가지고있는 또 다른 문제의 일부인 것을 알게 stackoverflow @ http://stackoverflow.com/questions/8934374/why-is-d3d10sdklayers-dll-loaded-during-my -dx11- 게임. ClipCursor와 아무 관계가 없기 때문에이 질문을 삭제할 것입니다. ClipCursor는 잘 작동합니다. – Darkhydro