2010-07-01 12 views

risposta

17

Un contesto di periferica (DC) è una struttura che definisce un insieme di oggetti grafici e i relativi attributi associati e le modalità grafiche che influiscono sull'output.

In base alla larghezza e all'altezza, suppongo che si stia riferendo alla bitmap dipinta?
Se è così allora credo che si può provare il seguente:

BITMAP structBitmapHeader; 
memset(&structBitmapHeader, 0, sizeof(BITMAP)); 

HGDIOBJ hBitmap = GetCurrentObject(hDC, OBJ_BITMAP); 
GetObject(hBitmap, sizeof(BITMAP), &structBitmapHeader); 

//structBitmapHeader.bmWidth 
//structBitmapHeader.bmHeight 
2

Come disclaimer, non so nulla di GDI o di ciò con cui si deve lavorare nella propria applicazione. Sto solo cercando di essere utile se possibile.

Detto questo, ho trovato un link che sembra suggerire che è opportuno utilizzare GetClientRect per ottenere la dimensione dell'area di disegno:

RECT clientRect; 

GetClientRect(hWnd,&clientRect); 

http://www.toymaker.info/Games/html/gdi.html#winsize

12

so anche poco di GDI, ma sembra che GetDeviceCaps potrebbe fare il trucco.

+7

In particolare, 'GetDeviceCaps (HDC, HORZRES)' e 'GetDeviceCaps (HDC, VERTRES) 'sono molto probabilmente ciò che è desiderato. – TheUndeadFish

+3

GetDeviceCaps (hdc, *) restituisce le dimensioni dello schermo indipendentemente dalle dimensioni della finestra. Il trucco di KevenK e msandiford è GetClientRect (WindowFromDC (hdc), & r). – AbePralle

2

Si potrebbe WindowFromDC(...) per ottenere la finestra del CC se è associata con una finestra. Potresti quindi utilizzare la risposta di @KKK per ottenere da questo il client rect.

1

Questo semplice pezzo di codice che uso sempre per ottenere le dimensioni dell'area di rendering, quando ho solo l'HDC. In primo luogo, è necessario ottenere un HWND dal HDC - è semplice, allora si può ottenere il rettangolo cliente di questo HWND:

RECT rcCli;   
GetClientRect(WindowFromDC(hdc), &rcCli); 
// then you might have: 
nWidth = rcCli.right-rcCli.left; 
nHeight = rcCli.bottom-rcCli.top; 
+0

Funziona solo quando DC è associato a una finestra. Per altri casi (ad esempio DC ottenuto da CreateCompatibleDC()) WindowFromDC() restituirà NULL. – Archie