如何用OpenGL+MFC连续无闪烁输出绘图????

懒佯佯大哥 2014-06-05 01:02:08
用OpenGL+MFC写了一个绘制波形的程序,希望实现的功能是每一秒钟刷新一次,显示绘制的波形。
思路是用COPENGL继承CView类并绘制波形(绘制一些随机数),然后贴到对话框上,但是不知道怎么刷新波形 。
思路是考虑缓存交换,但是不知道该怎么做!!!

首先:部分COpenGL里的函数代码如下:
void COPENGL::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
wglMakeCurrent(pDC->m_hDC,m_hRC);
glClearColor(0,0,0,1.0f);//清除 背景,也就是背景色
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
srand((unsigned)time( NULL ));
for (int k=0;k<nNum;k++)
{

fHrrp[k]=(float)(rand()%300-150)/((150-k)*(150-k));
if (fHrrp[k]<0)
{
fHrrp[k]=0-fHrrp[k];
}
if (fHrrp[k]>1.5)
{
fHrrp[k]=fHrrp[k]=1;
}
fHrrp[k]=fHrrp[k]-0.75;
}
glPushMatrix();
DrawLines(x,fHrrp,nNum);
vDrawCoordinate();
CString str;
str.Format("%s","range");
char *st=(LPSTR)(LPCTSTR)str;
DrawChar(0.70, -0.85, float(nNum));
DrawChar(-0.9,0.75 , 1);
DrawChar(-0.9,0 , 0.5);
DrawChar(-0.9,-0.75 , 0.0);
DrawChar(0, -0.85, st);
glPopMatrix();
glFlush();
SwapBuffers(pDC->m_hDC);
}

int COPENGL::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

PIXELFORMATDESCRIPTOR pfd={
sizeof(PIXELFORMATDESCRIPTOR), //size of the pfd
1, //version number
PFD_DRAW_TO_WINDOW| //support window
PFD_SUPPORT_OPENGL| //support OPENGLL
PFD_DOUBLEBUFFER, //double buffered
PFD_TYPE_RGBA, //RGBA type
24, //24bit color
0,0,0,0,0,0, //color bits ignored
0, //no alpha buffer
0, //shift bit ignored
0, //no accumulation buffer
0,0,0,0, //accum bits ignored
32, //32bit depth buffer
0, //no stencil buffer
0, //no auxiliary buffer
PFD_MAIN_PLANE, //main layer
0, //reversed
0,0,0 //layer masks ignored
};
CClientDC clientdc(this);
int pf=ChoosePixelFormat(clientdc.m_hDC,&pfd);
BOOL rt=SetPixelFormat(clientdc.m_hDC,pf,&pfd);
m_hRC=wglCreateContext(clientdc.m_hDC);
glShadeModel(GL_FLAT);
return 0;
}


最后在对话框中调用

BOOL CDrawDlg::OnInitDialog()
{
CDialog::OnInitDialog();

……
……
……

RECT rect;
rect.bottom = 0;rect.left = 0;rect.right = 200;rect.top = 200;
PPIView=new COPENGLL();

PPIView->Create(NULL, NULL, WS_CHILD|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_VISIBLE, rect,this, IDD_OPENGL,NULL);//创建的大小
PPIView->SetWindowPos(&wndTop,50,50,550,450,SWP_SHOWWINDOW);
return TRUE;
}

如何调整COpenGL和对话框CDrawDlg中的代码,不断刷新输出波形,并且是不同的随机数波形???
...全文
343 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ctzhenghua 2016-07-27
  • 打赏
  • 举报
回复
哥们实现的双缓冲能看下实现吗,不知道怎么实现唉,谢谢楼主 ctzhenghua@163.com
JackW2019 2014-07-10
  • 打赏
  • 举报
回复
wglMakeCurrent 这个函数在WM_CREATE消息里调用一次就可以了
gfire2008 2014-07-02
  • 打赏
  • 举报
回复
是不知道怎么绘制还是不知道怎么刷新 绘制的话双缓存刷新,目测代码已经实现 刷新的话用个Timer不就OK了
victor_woo 2014-06-09
  • 打赏
  • 举报
回复
swapBuffer
shiter 2014-06-06
  • 打赏
  • 举报
回复
看看大牛怎么说
hhhh63 2014-06-05
  • 打赏
  • 举报
回复
把OnDraw的代码直接放到对话框的OnPaint里面就行了。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧