大家好,
本人项目中采用VS2013+OpenGL绘图并对图形进行拷贝,测试程序为一个基于对话框的工程,在主对话框中有一个自定义控件用于绘图,该控件旁边有一个按钮控件Copy,其响应函数OnBnClickedButtonCopy()中对自定义控件中的图形做拷贝。
自定义控件CGraphCtrl中的OnPaint函数如下:
void CGraphCtrl::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
//MFC绘图
CRect rc;
GetClientRect(&rc);
dc.MoveTo(0, 0);
dc.LineTo(rc.right, rc.bottom);
dc.MoveTo(rc.right, 0);
dc.LineTo(0, rc.bottom);
//OpenGL绘图
wglMakeCurrent(m_hDC, m_hRC);
DrawGraph();
SwapBuffers(m_hDC);
wglMakeCurrent(m_hDC, NULL);
}
主对话框按钮控件Copy的响应函数如下:
void CUsingGlut32Dlg::OnBnClickedButtonCopy()
{
//m_GraphCtrl.WriteBmpToFile(hBitmap, _T("WriteBmpToFile.bmp"));
HBITMAP hBitmap = m_GraphCtrl.GetBmpHandle();
m_GraphCtrl.CopyBmpToClipBoard(hBitmap);
}
下面为该程序在win10 64位机器上的运行效果和点击按钮Copy后剪贴板中的内容:
该程序在win7 32位机器上运行正常,即点击Copy后剪贴板中的内容与界面显示的相同。
上述问题很让人难以理解,程序在64位计算机上运行时,DC所绘内容在哪儿?RC所绘内容与DC不在同一个缓存里?希望那位老师或大侠能给出解释和解决方案。非常感谢!