2014-09-22 4 views
0

현재 일부 레거시 코드를 Dx9에서 Dx11로 이식 중입니다. 나는 DirectX에 관한 약간의 초보자이다. 그래서 나랑 벗겨 줘. 나는 D3D 장치와 컨텍스트의 생성 과정을 포팅 할 수 있었지만 유지해야 할 레거시 코드가 있고 Dx11로 포팅하는 방법을 제대로 이해할 수 없습니다.DirectX11 모니터 핸들

문제의 코드는과 같이 모니터의 손잡이를 잡아하기 위해 Win32 함수를 사용

:

DEVMODE dm = { 0 }; 
dm.dmSize = sizeof(DEVMODE); 
EnumDisplaySettings("\\\\.\\DISPLAY3", ENUM_CURRENT_SETTINGS, &dm); 

POINT p = { dm.dmPosition.x, dm.dmPosition.y }; 
HMONITOR hMonitorGDI = MonitorFromPoint(p, MONITOR_DEFAULTTONEAREST); 

그런 다음 이렇게 같은 D3D9 장치에 연결된 어댑터 모니터를 통해 루프와 일치하는 핸들을 찾습니다를 :

unsigned int uiAdapterCount = m_p_d3d9->GetAdapterCount(); 
for (unsigned int i = 0; i < uiAdapterCount; ++i) { 
    HMONITOR hMonitorD3D = m_p_d3d9->GetAdapterMonitor(i); 
    if (hMonitorD3D == hMonitorGDI) 
    { 
     p_is->uiAdapter = i; 
     break; 
    } 
} 

나는 Dx11에서 동등한 작업을 수행하는 방법을 배울 수 없습니다. 나는 DXGIFactory를 생성하는 방법을 배웠고 그것을 통해 어댑터와 출력 (모니터) 정보를 얻었지만 Dx11에서 모니터의 핸들을 검색하는 것과 관련하여 아무 것도 찾을 수없는 것 같습니다.

올바른 방향으로 어떤 도움이나 조언을 주시면 감사하겠습니다. 건배

답변

2

IDXGIFactory::EnumAdapters을 사용하여 각 어댑터를 나열하고 IDXGIAdapter::EnumOutputs을 사용하여 각 어댑터의 출력을 열거 할 수 있습니다. 그런 다음 IDXGIOutput::GetDesc으로 전화하여 HMONITOR 핸들을 포함하는 DXGI_OUTPUT_DESC 구조를 가져옵니다.

동일한 데스크톱 좌표 또는 장치 이름을 사용하여 출력을 검색하여 GDI 예제 코드에서 1 단계 또는 2 단계를 건너 뛸 수 있습니다.

+0

나는이 질문을하기 전에 모든 단계를 수행하고 Monitor 변수를 놓친다는 것을 믿을 수 없다. 이 얼마나 멍청이. 건배, 매력처럼 작동 :) – TheRarebit