主要代码如下:
初始化:
CWnd *wnd=GetDlgItem(IDC_RENDER);
hrenderDC=::GetDC(wnd->m_hWnd);//DC
if(SetWindowPixelFormat(hrenderDC)==FALSE)//设置格式
return 0;
AfxBeginThread(ThreadFunc,(LPVOID)this);//开启线程
线程函数:
CMfc8Dlg * dlg = (CMfc8Dlg*)lpParam;
HDC Hdc1 = dlg->hrenderDC;
HGLRC hrenderRCA = wglCreateContext(Hdc1);
wglMakeCurrent( Hdc1,hrenderRCA);//设置当前rc
//画图开始
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);//黑色背景
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清除颜色缓冲区和深度缓冲区
glLoadIdentity();
glPushMatrix(); // 矩阵堆栈函数
glLoadIdentity(); // Reset The Current Modelview Matrix
。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。
glEnd(); // Finished Drawing The Triangle
glPopMatrix();
SwapBuffers(Hdc1);
//画图结束
如上,为什么只画出来背景啊?
------解决思路----------------------
把画图中的坐标输出下看看正常不,还有就是画完图后重绘下窗口
------解决思路----------------------
线程中进行数据计算,然后通过消息,在线程外绘制
------解决思路----------------------
Multiple Threads in the User Interface http://msdn.microsoft.com/zh-cn/library/ms810439.aspx
------解决思路----------------------
工作线程中不要对UI操作,除非你用UI线程,你可采用6楼的方案。
------解决思路----------------------
dc 不能跨线程
------解决思路----------------------
WM_PAINT在主线程中产生,然后OnPaint在主线程中完成绘制,退出后就完成了绘制。而你用另外一个线程绘制,要保证每次WWM_PAINT来的时候,你这个线程都必须会得到调用。否则就相当于真正绘制代码没有得到执行