2017-06-05 11 views
0

ダイアログ全体からデスクトップ全体のRectを取得したいとしていて、ATLはGetWindowRect(HWND hWnd, LPRECT lpRect)GetWindowRect(LPRECT lpRect)にオーバーライドしています。現在のダイアログウィンドウを想定しているため、lpRectはそれ自身の次元で塗りつぶされます。ATLの使用中にデスクトップを取得するには?

デスクトップウィンドウのRectを取得するにはどうすればよいですか?私はGetDesktopWindow()を使用しようとしましたが、HWNDを返しますが、それでも私はRectを見つけることができません。

答えて

0

私はあなたがやりたいように見えることthe MSDN page of CWindowにこのスニペットを見つけました。この後

HWND hWnd = ::GetDesktopWindow(); 
CWindow myWindow; 
myWindow.Attach(hWnd); 

、あなたは手始めに

myWindow.GetWindowRect(lpRect) 
1

を使用することができるはずです、あなたならば、あなたは::GetWindowRect(hWnd, lpRect);を行うことができますATLのCWindow::GetWindowRect(LPRECT)メンバーをバイパスしたいと考えています。

システムがマルチモニタである可能性があるため、デスクトップは必ずしも長方形ではありません。あなたはマルチモニタ側面を無視した場合

、あなたはGetSystemMetrics(SM_CXSCREEN) + GetSystemMetrics(SM_CYSCREEN)(またはGetSystemMetrics(SM_CXVIRTUALSCREEN) + GetSystemMetrics(SM_CYVIRTUALSCREEN))、またはSystemParametersInfo(SPI_GETWORKAREA, ...) APIを使用することができます。 ATLはショートカットを提供していませんが、これらは直接API呼び出しでなければなりません。

マルチモニタシステムの場合はenumerate monitorsとなり、列挙されたすべての作業領域が取得されます。これらは一緒にデスクトップです。

コンピュータ上のすべてのデバイスを列挙するには、EnumDisplayDevices関数を呼び出します。返される情報は、デスクトップの一部であるモニターも示します。

関連する問題