假设我有设备上下文句柄(当然,在Windows环境中):
HDC hdc;
如何获得它的宽度和高度?
答案 0 :(得分:20)
设备上下文(DC)是一种结构,它定义了一组图形对象及其相关属性,以及影响输出的图形模式。
根据宽度和高度,我猜你指的是绘制的位图?
如果是这样,那么我猜您可以尝试以下方法:
BITMAP structBitmapHeader;
memset( &structBitmapHeader, 0, sizeof(BITMAP) );
HGDIOBJ hBitmap = GetCurrentObject(hDC, OBJ_BITMAP);
GetObject(hBitmap, sizeof(BITMAP), &structBitmapHeader);
//structBitmapHeader.bmWidth
//structBitmapHeader.bmHeight
答案 1 :(得分:11)
我对GDI也知之甚少,但似乎GetDeviceCaps可能会解决这个问题。
答案 2 :(得分:3)
当我只有HDC时,我总是用这个简单的代码来获取渲染区域的尺寸。 首先,您必须从HDC获得HWND - 很简单,然后您可以获得此HWND的客户端矩形:
RECT rcCli;
GetClientRect(WindowFromDC(hdc), &rcCli);
// then you might have:
nWidth = rcCli.right-rcCli.left;
nHeight = rcCli.bottom-rcCli.top;
答案 3 :(得分:2)
作为免责声明,我对GDI或您在应用程序中必须使用的内容一无所知。如果可能的话,我只是想提供帮助。
那就是说,我找到了一个链接,似乎表明使用GetClientRect
来获得绘图区域的大小是合适的:
RECT clientRect;
GetClientRect(hWnd,&clientRect);
答案 4 :(得分:2)
如果与窗口关联,您可以WindowFromDC(...)
获取DC的窗口。然后你可以使用@KevinK的答案让客户端直接从中获取。
答案 5 :(得分:0)
但是如果获取计算器的window_dc尺寸,它将在“ GetCurrentObject”或“ GetObject”处失败,我想也许window属性包含“ 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;
}
}