2017-06-05 1 views
0

Je veux obtenir le Rect de l'ensemble du bureau à partir d'une boîte de dialogue, et ATL a substitué le GetWindowRect(HWND hWnd, LPRECT lpRect) à GetWindowRect(LPRECT lpRect) et il assume la fenêtre de dialogue en cours afin qu'il remplisse simplement le lpRect avec ses propres dimensions.Comment obtenir le bureau Rect en utilisant ATL?

Comment obtenir le Rect de la fenêtre de bureau? J'ai essayé d'utiliser le GetDesktopWindow(), mais il renvoie un HWND avec lequel je n'arrive toujours pas à trouver le Rect.

Répondre

0

Je trouve cet extrait sur the MSDN page of CWindow qui semble faire ce que vous voulez:

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

Après cela, vous devriez être en mesure d'utiliser

myWindow.GetWindowRect(lpRect) 
1

Pour commencer, vous pouvez faire ::GetWindowRect(hWnd, lpRect); si vous voulez contourner le membre CWindow::GetWindowRect(LPRECT) de l'ATL.

Le bureau n'est pas nécessairement rectangulaire car votre système peut être multi-moniteur.

Si vous ignorez l'aspect multi-moniteur, vous pouvez utiliser GetSystemMetrics(SM_CXSCREEN) + GetSystemMetrics(SM_CYSCREEN) (ou GetSystemMetrics(SM_CXVIRTUALSCREEN) + GetSystemMetrics(SM_CYVIRTUALSCREEN)), ou SystemParametersInfo(SPI_GETWORKAREA, ...) API. ATL ne propose pas de raccourcis, ceux-ci devront être des appels API directs.

Avec un système multi-moniteur, vous obtenez enumerate monitors et obtenez une zone de travail pour chaque énuméré. Ensemble, ils sont le bureau:

Pour énumérer tous les périphériques de l'ordinateur, appelez la fonction EnumDisplayDevices. Les informations renvoyées indiquent également quel moniteur fait partie du bureau.