【问题标题】:Windows api get client dc bitmap sizeWindows api 获取客户端 dc 位图大小
【发布时间】:2015-05-15 03:53:13
【问题描述】:

我使用以下代码来获取与 Windows MFC View 窗口的客户区 DC 绑定的位图的大小:

void CView::OnDraw(CDC* )
{
    CDC *pDc = GetDC();
    BITMAP bmpHeader;
    memset( &bmpHeader, 0, sizeof(BITMAP));
    HGDIOBJ hbmp = GetCurrentObject(pDc->m_hDC, OBJ_BITMAP);
    GetObject(hbmp,sizeof(BITMAP), &bmpHeader);

    int bmpWidth = bmpHeader.bmWidth;
    int bmpHeight = bmpHeader.bmHeight;
    ...
}

根据MSDN GetDC() 获取客户区dc:

根据为 CWnd 指定的类样式,检索指向客户区的公共、类或私有设备上下文的指针

所以我想 bmpWidthbmpHeight 应该与客户区矩形的大小相同。但事实并非如此。它似乎是整个窗口的大小,包括工具栏区域和菜单区域。我在这里做错了吗?

【问题讨论】:

    标签: c++ winapi bitmap mfc


    【解决方案1】:

    使用GetClientRect 查找客户区的高度和高度。这是不包括标题栏和边框的区域。不要调用GetDC(),而是使用已经提供的CDC* 参数,或者使用具有自动清理功能的CClientDC dc(this)。在这种情况下,绘图应该是这样的:

    void CMyView::OnDraw(CDC* dc)
    {
        CRect rc;
        GetClientRect(&rc); 
        dc->FillSolidRect(rc, RGB(0, 0, 255));
    }
    

    使用Window Functions 获取有关 Windows 的信息。

    大多数 Window 函数在 MFC 中具有等效功能。例如,

    在 WinApi 中:GetClientRect(HWND hwnd, LPRECT rc);

    在 MFC 中:CWnd::GetClientRect(LPRECT rc);

    【讨论】:

      猜你喜欢
      • 2011-04-25
      • 2018-01-31
      • 1970-01-01
      • 2017-04-20
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多