如何找出DC的尺寸?

nha*_*123 14 c++ winapi gdi

假设我有一个设备上下文句柄(当然,在Windows环境中):

HDC hdc;
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到它的宽度和高度?

Yee*_*Fei 22

设备上下文(DC)是一种结构,它定义一组图形对象及其相关属性,以及影响输出的图形模式.

根据宽度和高度,我猜你是指绘制的位图?
如果是这样,那么我想你可以尝试以下方法:

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

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

//structBitmapHeader.bmWidth
//structBitmapHeader.bmHeight
Run Code Online (Sandbox Code Playgroud)


Cog*_*eel 12

我对GDI也知之甚少,但似乎GetDeviceCaps可能会做到这一点.

  • 具体来说,`GetDeviceCaps(hdc,HORZRES)`和`GetDeviceCaps(hdc,VERTRES)`很可能是你想要的. (8认同)
  • 无论窗口大小如何,GetDeviceCaps(hdc,*)都会返回屏幕尺寸.KevenK和msandiford的GetClientRect(WindowFromDC(hdc),&r)可以解决这个问题. (3认同)

小智 5

当我只有 HDC 时,我总是使用这段简单的代码来获取渲染区域的尺寸。首先,您必须从 HDC 获取 HWND - 很简单,然后您可以获取此 HWND 的客户端 rect:

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

  • 这仅在 DC 与窗口关联时才有效。对于其他情况(例如从 CreateCompatibleDC() 获得的 DC),WindowFromDC() 将返回 NULL。 (2认同)