Diciamo che ho un handle del device context (naturalmente, in ambiente Windows):Come scoprire le dimensioni di DC?
HDC hdc;
Come posso ottenere la larghezza e l'altezza di esso?
Diciamo che ho un handle del device context (naturalmente, in ambiente Windows):Come scoprire le dimensioni di DC?
HDC hdc;
Come posso ottenere la larghezza e l'altezza di esso?
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
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);
so anche poco di GDI, ma sembra che GetDeviceCaps potrebbe fare il trucco.
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.
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;
Funziona solo quando DC è associato a una finestra. Per altri casi (ad esempio DC ottenuto da CreateCompatibleDC()) WindowFromDC() restituirà NULL. – Archie
In particolare, 'GetDeviceCaps (HDC, HORZRES)' e 'GetDeviceCaps (HDC, VERTRES) 'sono molto probabilmente ciò che è desiderato. – TheUndeadFish
GetDeviceCaps (hdc, *) restituisce le dimensioni dello schermo indipendentemente dalle dimensioni della finestra. Il trucco di KevenK e msandiford è GetClientRect (WindowFromDC (hdc), & r). – AbePralle