jqrritfk11
2019-12-12 20:54
采纳率: 100%
浏览 153

请问设置MM_LOMETRIC模式后,怎样使用双缓存,下面的代码在BitBlt后,得不到正确的客户区大小

int oldMapMode = pDC->SetMapMode(MM_LOMETRIC);

int oldBkMode = pDC->SetBkMode(TRANSPARENT);

CRect rcClient;

GetClientRect(&rcClient);

// pDC->DPtoLP(&rcClient);

pDC->SetViewportOrg(rcClient.left, rcClient.bottom);

CDC memDC; // Memory DC.

memDC.CreateCompatibleDC(pDC);

CBitmap memBitmap; // Create memory bitmap.

memBitmap.CreateCompatibleBitmap(&memDC, rcClient.Width(), rcClient.Height() );

memDC.SelectObject(&memBitmap); // Select the bitmap object.

// memDC.FillSolidRect(rcClient, pDC->GetBkColor());

pDC->BitBlt(0, 0, rcClient.Width(), rcClient.Height(), &memDC, 0, 0, SRCCOPY);

memDC.DeleteDC();

memBitmap.DeleteObject();

pDC->SetMapMode(oldMapMode);

pDC->SetBkMode(oldBkMode);

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • weixin_46200348 2020-01-16 13:03
    已采纳

    1>在内存DC上完成同样的操作:
    emDC.SetViewportOrg(rcClient.left, rcClient.bottom);

    2>第1、第2,第6,第7个参数分别改为计算后的逻辑坐标
    pDC->BitBlt(0, 0, rcClient.Width(), rcClient.Height(), &memDC, 0, 0, SRCCOPY);

    打赏 评论

相关推荐 更多相似问题