【问题标题】:hdc is undefined [gdi+, mfc standard application]hdc 未定义 [gdi+, mfc 标准应用程序]
【发布时间】:2015-03-12 03:32:54
【问题描述】:

所以我的老师给了我们一段代码用于双缓冲。

他说:“在这里,使用此代码,这样您就不必坐在那里数小时了解如何操作” 除了他的代码不起作用。

他最初对 hdc 的使用是未定义的。我尝试将其放入参数列表中,但这是不行的。

这是他给我们的代码:

// Create a backbufer bmp bufer to draw to in memory.
 RECT rcClient;
 ::GetClientRect(hwnd, &rcClient);
 int left = rcClient.left;
 int top = rcClient.top;
 int width = rcClient.right - rcClient.left;
 int height = rcClient.bottom - rcClient.top;
 HDC hdcMem = ::CreateCompatibleDC(hdc);
 const int nMemDC = ::SaveDC(hdcMem);
 HBITMAP hBitmap = ::CreateCompatibleBitmap(hdc, width, height);
 ::SelectObject(hdcMem, hBitmap);
 Graphics graphics(hdcMem);
 SolidBrush back(Color(255,255,255));
 graphics.FillRectangle(&back, left, top, width, height);
 // Draw to backbufer bitmap here.

 // End draw to backbufer bitmap bufer.
 // Swap bufers ie. push memory backbufer to the screen frontbufer
 RECT rcClip;
 ::GetClipBox(hdc, &rcClip);
 left = rcClip.left;
 top = rcClip.top;
 width = rcClip.right - rcClip.left;
 height = rcClip.bottom - rcClip.top;
 ::BitBlt(hdc, left, top, width, height, hdcMem, left, top, SRCCOPY);
 ::RestoreDC(hdcMem, nMemDC);
 ::DeleteObject(hBitmap);

这就是我遇到错误的地方:HDC hdcMem = ::CreateCompatibleDC(hdc); 我试图像这样声明一个 HDC

HDC hdc = (HDC)BeginPaint((LPPAINTSTRUCT)AfxGetApp()->m_pMainWnd->GetSafeHwnd());

但这不会编译。我该如何处理这个 hdc?

【问题讨论】:

  • 代码显然期望hdc 已经可用(可能是您尝试绘制的窗口的DC)。应该有一些其他的文本来解释这一点。如果没有,那么您可以尝试GetDC 函数。
  • 不要使用BeginPaint,除非你在WM_PAINT消息的处理程序中。

标签: c++ mfc gdi+ gdi


【解决方案1】:

HDC 由 BeginPaint 返回,大概是在此代码之前立即调用的。 BeginPaint 有两个参数,而您试图只用一个参数调用它。您之前有处理 BeginPaint 的练习吗?

【讨论】:

    【解决方案2】:

    感谢这里的各种答案。我对此的了解仍然相当新,但是在我的同学的帮助下,我能够找到解决方案。可悲的是,我仍然不知道如何处理 HDC,这是我的第一个问题,

     HDC hdcMem = ::CreateCompatibleDC(hdc); was able to be replaced by
     HDC hdcMem = ::CreateCompatibleDC(dc); 
    

    许多其他产生警告的代码(例如 hwnd)被简单地删除并且运行良好。

    【讨论】:

      猜你喜欢
      • 2018-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多