2010-07-01 6 views
12

Скажем, у меня есть дескриптор контекста устройства (естественно, в среде Windows):Как найти размеры DC?

HDC hdc; 

Как я могу получить ширину и высоту его?

ответ

17

Контекст устройства (DC) - это структура, которая определяет набор графических объектов и связанных с ними атрибутов и графические режимы, влияющие на выход.

По ширине и высоте Я предполагаю, что вы имеете в виду растровое изображение, нарисованное?
Если да, то я думаю, вы можете попробовать следующее:

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

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

//structBitmapHeader.bmWidth 
//structBitmapHeader.bmHeight 
2

Как отказ от ответственности, я ничего не знаю о GDI или о том, с чем вы должны работать в своем приложении. Я просто стараюсь быть полезным, если это возможно.

То есть, я нашел ссылку, которая, кажется, предположить, что это уместно использовать GetClientRect, чтобы получить размер области рисования:

RECT clientRect; 

GetClientRect(hWnd,&clientRect); 

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

12

Я также знаю немного о GDI, но кажется GetDeviceCaps может сделать трюк.

+7

В частности, 'GetDeviceCaps (HDC, HORZRES)' и 'GetDeviceCaps (HDC, VERTRES) 'скорее всего, то, что нужно. – TheUndeadFish

+3

GetDeviceCaps (hdc, *) возвращает размеры экрана независимо от размера окна. Однако KevenK и GetClientRect от msandiford (WindowFromDC (hdc), & r) делают трюк. – AbePralle

2

Вы могли WindowFromDC(...) получить окно в DC, если это связано с окном. Затем вы можете использовать ответ @ KevinK, чтобы получить от этого клиента.

1

Этот простой кусок кода, который я использую всегда, чтобы получить размеры области рендеринга, когда у меня есть только HDC. Во-первых, вы должны получить HWND от HDC - это просто, то вы можете получить клиентский прямоугольник этого HWND:

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

Это будет работать, только когда DC связано с окном. Для других случаев (например, DC, полученных из CreateCompatibleDC()) WindowFromDC() возвращает NULL. – Archie

Смежные вопросы