2013-05-12 4 views
-1

에 표시 상대의 위치 좌표를 찾기 EnumDisplaySettings이 정의가 데이터 구조의 DEVMODE를로드하는 데 사용됩니다몇 년 전 유래에 대한 예에서 데스크톱 지역

Private Type DEVMODE 
    dmDeviceName As String * CCHDEVICENAME 
    dmSpecVersion As Integer 
    dmDriverVersion As Integer 
    dmSize As Integer 
    dmDriverExtra As Integer 
    dmFields As Long 
    dmOrientation As Integer 
    dmPaperSize As Integer 
    dmPaperLength As Integer 
    dmPaperWidth As Integer 
    dmScale As Integer 
    dmCopies As Integer 
    dmDefaultSource As Integer 
    dmPrintQuality As Integer 
    dmColor As Integer 
    dmDuplex As Integer 
    dmYResolution As Integer 
    dmTTOption As Integer 
    dmCollate As Integer 
    dmFormName As String * CCHFORMNAME 
    dmLogPixels As Integer 
    dmBitsPerPel As Long 
    dmPelsWidth As Long 
    dmPelsHeight As Long 
    dmDisplayFlags As Long 
    dmDisplayFrequency As Long 
End Type 
dmPelsWidth 및 dmPelsHeight이 데이터로 검색됩니다

구조. 이것도 나를 위해 작동합니다. 또한 바탕 화면 영역에 상대적인 디스플레이의 위치 좌표를 찾고 싶습니다. DEVMODE 구조체의 Windows Dev Center에있는 정보를 보면 POINTL 구조체 인 dmPosition 매개 변수가 있음을 알 수 있습니다. 이것은 위의 DEVMODE 유형 정의에서 제외되었으며 추가 할 때 dmPelsWidth 및 dmPelsHeight는 더 이상 올바른 정보를 검색하지 않습니다.

위의 dmPosition이 생략 된 이유와 검색된 정보를 포함 시켰을 때 더 이상 작동하지 않는 이유는 무엇입니까? 실시 예에

링크 : find size of external monitor in excel vba

답변

0

이 문제는 C++에서 DEVMODE 정의가 union는 동일한 메모리의 두 stuct 옵션 오버레이 (according to Microsoft)

union { 
    struct { 
     short dmOrientation; 
     short dmPaperSize; 
     short dmPaperLength; 
     short dmPaperWidth; 
     short dmScale; 
     short dmCopies; 
     short dmDefaultSource; 
     short dmPrintQuality; 
    }; 
    struct { 
     POINTL dmPosition; 
     DWORD dmDisplayOrientation; 
     DWORD dmDisplayFixedOutput; 
    }; 
    }; 

, 제 relavent 포함한다는 것이다 프린터 장치에, 두 번째 장치는 장치를 표시합니다. AFAIK이 기술은 디스플레이 장치에 대한 데이터, 당신은 dmPosition_XdmPosition_Y에서 바탕 화면 위치에 액세스 할 수 있어야이

Private Type DEVMODE 
    dmDeviceName As String * CCHDEVICENAME 
    dmSpecVersion As Integer 
    dmDriverVersion As Integer 
    dmSize As Integer 
    dmDriverExtra As Integer 
    dmFields As Long 
' dmOrientation As Integer 
' dmPaperSize As Integer 
' dmPaperLength As Integer 
' dmPaperWidth As Integer 
' dmScale As Integer 
' dmCopies As Integer 
' dmDefaultSource As Integer 
' dmPrintQuality As Integer 
    dmPosition_X As Long 
    dmPosition_Y As Long 
    dmDisplayOrientation As Long 
    dmDisplayFixedOutput As Long 

    dmColor As Integer 
    dmDuplex As Integer 
    dmYResolution As Integer 
    dmTTOption As Integer 
    dmCollate As Integer 
    dmFormName As String * CCHFORMNAME 
    dmLogPixels As Integer 
    dmBitsPerPel As Long 
    dmPelsWidth As Long 
    dmPelsHeight As Long 
    dmDisplayFlags As Long 
    dmDisplayFrequency As Long 
End Type 

Type DEVMODE 정의를 변경 얻으려고 노력하고 있기 때문에 VBA

에서 지원되지 않으며, 여전히 해상도를 dmPelsWidthdmPelsHeight

+0

굉장! 설명과 해결책을 가져 주셔서 감사합니다. – TDK

+0

도와 드리겠습니다. 문제를 해결하는 해답을 얻었 으면 수락해야합니다 (틱 클릭) –

관련 문제