rocket_liushaodong 2016-05-27 02:06 采纳率: 0%
浏览 953

OpenGL在64位计算机上无法以bmp方式拷贝绘制的图形?

大家好,
本人项目中采用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不在同一个缓存里?希望那位老师或大侠能给出解释和解决方案。非常感谢!

  • 写回答

1条回答 默认 最新

  • 普通网友 2016-10-04 18:34
    关注

    本人项目中采用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);

    评论

报告相同问题?

悬赏问题

  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面