【问题标题】:Calling a paint function from CDialog::OnPaint从 CDialog::OnPaint 调用绘制函数
【发布时间】:2014-10-03 15:04:47
【问题描述】:

嗯,我想要一个非常简单的东西,但有点困惑。

    void CAppDlg::OnPaint()
    {
      CPaintDC dc(this);
      CDC pdc;
      pdc.CreateCompatibleDC(&dc);
      CBitmap *oldBmp = pdc.SelectObject(&m_BmpImg[0]);
      dc.BitBlt(0, 0, m_SizBmpImg[0].cx, m_SizBmpImg[0].cy, &pdc, 0, 0, SRCCOPY);
      dc.SelectObject(&oldBmp);
    }

在上面的代码 sn-p 中,我想把最后 3 行放到一个单独的函数中。现在我无法将 CPaintDC 作为函数参数传递,我需要将其转换为 CDC 或 CMemDC。还有我如何传递这个 pdc (CDC pdc) 或者我应该在我的函数中创建一个新的。

带有一点解释的示例会很有帮助。

【问题讨论】:

  • 您可以通过引用或指针将任何内容作为参数传递。

标签: winapi mfc


【解决方案1】:

这应该可行。

void CAppDlg::OnPaint()
{
  CPaintDC dc(this);
  CDC pdc;
  pdc.CreateCompatibleDC(&dc);

  YourSeparateFUnction(dc, pdc);
}

void  CAppDlg::YourSeparateFUnction(CPaintDC & dc, CDC & pdc)
{
  CBitmap *oldBmp = pdc.SelectObject(&m_BmpImg[0]);
  dc.BitBlt(0, 0, m_SizBmpImg[0].cx, m_SizBmpImg[0].cy, &pdc, 0, 0, SRCCOPY);
  dc.SelectObject(&oldBmp);
}

【讨论】:

  • void CAppDlg::PaintSeperated(CDC *pDC, CDC *pDcCompatible) - 我相信 CPaintDC 仅在 OnPaint 中可用。
  • 你是从OnPaint以外的其他函数调用PaintSeperated吗?
  • @hypheni: CPaintDC 不代表特殊的设备上下文。 CPaintDCCDC 之间的唯一区别是,前者分别在 c'tor 和 d'tor 中调用 BeginPaintEndPaint 以正确验证屏幕区域。通过引用传递 CPaintDC 不是问题,尽管您可以(或应该)通过引用传递泛型基类:CDC&
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
相关资源
最近更新 更多