当前位置: 代码迷 >> VC/MFC >> 100分,MFC 线程中画图,为什么画不出来
  详细解决方案

100分,MFC 线程中画图,为什么画不出来

热度:150   发布时间:2016-05-02 03:48:14.0
100分,求助,MFC 线程中画图,为什么画不出来啊
本帖最后由 sdu_hanson 于 2015-05-15 10:30:08 编辑
主要代码如下:
初始化:

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来的时候,你这个线程都必须会得到调用。否则就相当于真正绘制代码没有得到执行
  相关解决方案