vs2012 opengl-Opengl MFC多线程如何在原窗口进行绘图

问题描述

Opengl MFC多线程如何在原窗口进行绘图

由于OPENGL绘图占用时间较长(32ms),不得不新开一个线程进行绘图,但我发现我现在的程序每次都要新建窗口。请问,怎么在原窗口上绘图啊?

解决方案

glutCreateWindow()从名字上看不是你注释的设置窗口标题,而是创建一个新窗口。
看你线程中的代码应该是从一个控制台项目中拷贝过来的,因为没用过opengl所以不能给你明确的解决办法,但估计opengl应该有个设置绘图窗口的函数,你在线程中调用这个函数就可以了。
建议还是仔细看过库的详细用法再动手开发,否则也是知其然不知其所以然。

解决方案二:

解决方案三:

这个nene的教程上面应该有的啊,就是旋转立方体的那个

解决方案四:

原窗口,那你还是要在主线程上画图,那你线程中发送消息过去通知主线程画图。

解决方案五:

已经解决了,这是我的线程函数(类似于单片机程序,很熟悉)
int OpenGLThread(LPVOID lpv)//线程run函数
{
//获得线程创建时对话框传入的参数,可以通过这里传递给opengl一些控制参数
COpenGLVS20122Dlg* pTaskMain = (COpenGLVS20122Dlg *) lpv;
pTaskMain->MySetPixelFormat(::GetDC(pTaskMain->m_hWnd)); // 设置当前的绘图像素格式
pTaskMain->hdc = ::GetDC(pTaskMain->m_hWnd); // 获得绘图描述表
pTaskMain->hglrc = wglCreateContext(pTaskMain->hdc); // 创建绘图描述表
wglMakeCurrent(pTaskMain->hdc, pTaskMain->hglrc); // 使绘图描述表为当前调用现程的当前绘图描述表
//pTaskMain->OnCreate(pTaskMain->lpCreateStruct);
pTaskMain->InitGL();
while (true)
{
pTaskMain->GLDraw();
}

这样就OK了

时间: 2024-08-03 22:18:10

vs2012 opengl-Opengl MFC多线程如何在原窗口进行绘图的相关文章

opengl 纹理 球-opengl在mfc中载入一副BMP文件作为纹理,编译链接都通过了但运行时就提示停止工作

问题描述 opengl在mfc中载入一副BMP文件作为纹理,编译链接都通过了但运行时就提示停止工作 HBITMAP hBMP;//定义BMP头BITMAP BMP;//BMP结构体//byte Texture[]={IDB_BITMAP3};byte Texture[]={IDB_BITMAP4};glGenTextures(sizeof(Texture) &texture[0]);// Generate 6 Textures (sizeof(Texture)=6 ID's)for(int lo

Java多线程:“JUC原子类”03之AtomicLongArray原子类

AtomicLongArray介绍和函数列表 在"Java多线程系列--"JUC原子类"02之 AtomicLong原子类"中介绍过, AtomicLong是作用是对长整形进行原子操作.而AtomicLongArray的作用则是对"长整形数组" 进行原子操作. AtomicLongArray函数列表 // 创建给定长度的新 AtomicLongArray. AtomicLongArray(int length) // 创建与给定数组具有相同长度的

C++ 关于MFC多线程编程的注意事项

  这篇文章主要介绍了C++ 关于MFC多线程编程的注意事项的相关资料,需要的朋友可以参考下 在多线程编程中,最简单的方法,无非就是利用 AfxBeginThread 来创建一个工作线程,看一下这个函数的说明: 代码如下: CWinThread* AFXAPI AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize =

MFC多线程创建文件写数据

问题描述 MFC多线程创建文件写数据 初始化线程时创建文件如下(以当前时间命名文件于当前进程的当前目录): if(hThread)//初始化线程 { cTime = cTime.GetCurrentTime(); tmp = cTime.Format(_T(""%Y%m%d%H%M%S"")); GetCurrentDirectory(MAX_PATH path);//返回当前进程的当前目录 str_file_netpath.Format(_T("&quo

MFC多线程函数暂停计算以及恢复计算

问题描述 MFC多线程函数暂停计算以及恢复计算 线程能不能在主程序中暂停,主线程用什么函数控制子线程暂停,子线程暂停后怎么恢复计算? 解决方案 参考:http://blog.csdn.net/tigertianx/article/details/17436291

MFC多线程复制数组的性能优化问题

问题描述 MFC多线程复制数组的性能优化问题 多线程复制数组,并且统计计算数组的方差和指数函数,使用MFC多线程优化的做法是什么? 解决方案 http://bbs.csdn.net/topics/330071067 解决方案二: 多线程性能及效率问题多线程性能及效率问题多线程性能及效率问题

MFC多线程如果出现故障,数据保存可以借助于什么数据结构?

问题描述 MFC多线程如果出现故障,数据保存可以借助于什么数据结构? 如果线程出错的话,需要恢复从头继续执行的,不能丢失数据,在MFC中怎么实现了?谢谢 解决方案 实在不知道你问什么,这个和数据结构没有关系. 解决方案二: 线程出错没办法直接恢复,你可以在线程开始的时候,把数据保存到文件等,重新开始线程的时候读取文件来保持一致

mfc多线程一次读写文件

问题描述 mfc多线程一次读写文件 CFile file1; int i; void CflieopenDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 file1.Open(_T("D://vls//2.txt"),CFile::modeReadWrite); DWORD threadID; for(i = 0; i < 5; i++) { CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)T

类-MFC多线程同步问题,互斥量

问题描述 MFC多线程同步问题,互斥量 共享资源是一些类对象的MAP,每个对象(某设备实例)中有不同的互斥量同步不同的类变量(本意是防止多线程访问同一个对象),现在迷糊了,互斥量放在类里面是不是不当?是不是在访问对象的时候就加互斥量来的方便(对整个对象进行加锁 - 因为对整个类操作较多,这么做貌似锁太深了)?求大神帮助 解决方案 这个要具体看对象的生存空间,和互斥量的作用!无法一概而论. 解决方案二: 搞这么麻烦干什么,线程同步直接用CreateMutex和WaitForSingleObject