Подтвердить что ты не робот

Как найти размеры DC?

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

HDC hdc;

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

4b9b3361

Ответ 1

Контекст устройства (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, но кажется, что GetDeviceCaps может сделать трюк.

Ответ 3

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

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

Ответ 4

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

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

RECT clientRect;

GetClientRect(hWnd,&clientRect);

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

Ответ 5

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

Ответ 6

но если получить измерение 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;
    }
}