Как узнать размеры DC? - PullRequest
14 голосов
/ 01 июля 2010

Допустим, у меня есть дескриптор контекста устройства (естественно, в среде Windows):

HDC hdc;

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

Ответы [ 6 ]

22 голосов
/ 01 июля 2010

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

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

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

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

//structBitmapHeader.bmWidth
//structBitmapHeader.bmHeight
12 голосов
/ 01 июля 2010

Я также мало знаю о GDI, но, похоже, GetDeviceCaps может сработать.

3 голосов
/ 11 июня 2015

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

RECT    rcCli;          
GetClientRect(WindowFromDC(hdc), &rcCli);
// then you might have: 
nWidth = rcCli.right-rcCli.left; 
nHeight  = rcCli.bottom-rcCli.top;
2 голосов
/ 01 июля 2010

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

2 голосов
/ 01 июля 2010

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

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

RECT clientRect;

GetClientRect(hWnd,&clientRect);

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

0 голосов
/ 01 июля 2019

, но если получить измерение window_dc калькулятора, оно не будет выполнено в «GetCurrentObject» или «GetObject», я думаю, что, возможно, атрибут окна включает в себя «ws_ex_noredirectionbitmap», как получить размерение в этом случае?

HDC win_dc = ::GetWindowDC(hwnd);
BITMAP bm = { 0 };
HGDIOBJ hBitmap = GetCurrentObject(win_dc, OBJ_BITMAP);
if (hBitmap)
{
    if (GetObject(hBitmap, sizeof(BITMAP), &bm))
    {
        windc_dimension.cx = bm.bmWidth;
        windc_dimension.cy = bm.bmHeight;
    }
}
...