How to find out DC's dimensions?

前端 未结 6 969
一向
一向 2020-12-31 05:53

Let\'s say I have a handle to device context (naturally, in Windows environment):

HDC hdc;

How can I get the width and height of it?

相关标签:
6条回答
  • 2020-12-31 06:24

    As a disclaimer, I know nothing about GDI or what you have to work with in your application. I'm just trying to be helpful if possible.

    That said, I found a link which seems to suggest that it's appropriate to use GetClientRect to get the size of the drawing area:

    RECT clientRect;
    
    GetClientRect(hWnd,&clientRect);
    

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

    0 讨论(0)
  • 2020-12-31 06:24

    but if get Calculator' window_dc dimension, it will failed at “GetCurrentObject” or "GetObject", i think maybe the window attribute include "ws_ex_noredirectionbitmap", how to get dismension in this case?

    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;
        }
    }
    
    0 讨论(0)
  • 2020-12-31 06:28

    I also know little about GDI, but it seems GetDeviceCaps might do the trick.

    0 讨论(0)
  • 2020-12-31 06:34

    A device context (DC) is a structure that defines a set of graphic objects and their associated attributes, and the graphic modes that affect output.

    By width and height I'm guessing you are referring to the bitmap painted ?
    If so then i guess you can try the following :

    BITMAP structBitmapHeader;
    memset( &structBitmapHeader, 0, sizeof(BITMAP) );
    
    HGDIOBJ hBitmap = GetCurrentObject(hDC, OBJ_BITMAP);
    GetObject(hBitmap, sizeof(BITMAP), &structBitmapHeader);
    
    //structBitmapHeader.bmWidth
    //structBitmapHeader.bmHeight
    
    0 讨论(0)
  • 2020-12-31 06:41

    This simple piece of code I use always to get the dimensions of the rendering area, when I have only the HDC. First, you must get a HWND from the HDC - is simple, then you can get the client rect of this HWND:

    RECT    rcCli;          
    GetClientRect(WindowFromDC(hdc), &rcCli);
    // then you might have: 
    nWidth = rcCli.right-rcCli.left; 
    nHeight  = rcCli.bottom-rcCli.top;
    
    0 讨论(0)
  • 2020-12-31 06:41

    You could WindowFromDC(...) to get the DC's window if it's associated with a window. You could then use @KevinK's answer to get the client rect from this.

    0 讨论(0)
提交回复
热议问题