我要在一个MFC的视图上显示很多的信息,如文字,一些信号谱线,还有一些按钮及编辑框的东西,且需要在界面的下方,大概占视图高度1/3的一个矩形区内用OPENGL绘制三维图形,可以做到吗?怎么实现?高分求教,并请赐源码。(分不够再给)或者是将三维图形显示在一CFormView中的指定的Static控件中(将Static控件指定为显示图像)怎么做?万分感谢!!!!!!!!!!!!!!!!两种方案的任何一种,只要能实现都可以。
调试欢乐多
我觉得理论上来说应该是可以实现的,就是不知道怎么做 :(
但是你可以创建一个窗口,覆盖在你指定的位置上,在其中来显示opengl的内容是可行的第二种方法常见
比如在对话框或者其中的一个控件上显示opengl图形其实都是同一个原因,opengl显示的时候,要求独占一个窗口,而不能只占据其中的一个部分
你的问题可以用一个 CWnd 窗口作为大窗口的子窗口,然后在这个子窗口上用ogl绘制。
可以从 CWnd 继承形成一个子类。
protected:
HICON m_hIcon;
COpenGLControl openGLControl;////////OpenGLDialogDlg.cpp
BOOL COpenGLDialogDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// wenn das Hauptfenster der Anwendung kein Dialogfeld ist
SetIcon(m_hIcon, TRUE); // Gro遝s Symbol verwenden
SetIcon(m_hIcon, FALSE); // Kleines Symbol verwenden
// ZU ERLEDIGEN: Hier zus鋞zliche Initialisierung einf黦en
CRect rect; GetDlgItem(IDC_OPENGL_WINDOW)->GetWindowRect(rect); ScreenToClient(rect);
//GetWindowRect(thisRect);
openGLControl.Create(rect,this); return TRUE; //
}////////COpenGLControl.cpp
void COpenGLControl::InitGL()
{
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1.0f);
//glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}void COpenGLControl::DrawGLScene()
{
glClear(GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT);
glLoadIdentity(); //***************************
// DRAWING CODE
//***************************// glTranslatef(0.0f,0.0f,-5.0f);
glRotatef(rotation,0.0f,1.0f,0.0f); glBegin(GL_TRIANGLES);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(1.0f,-1.0f,0.0f);
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(-1.0f,-1.0f,0.0f);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(0.0f,1.0f,0.0f);
glEnd();/* glBegin(GL_QUADS);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(-1.1f,-1.1,0.0f);
glVertex3f(1.1f,-1.1f,0.0f);
glVertex3f(1.1f,1.1f,0.0f);
glVertex3f(-1.1f,1.1f,0.0f);
glEnd();*/ SwapBuffers(dc->m_hDC);
}void COpenGLControl::Create(CRect rect, CWnd *parent)
{
CString className = AfxRegisterWndClass(
CS_HREDRAW | CS_VREDRAW | CS_OWNDC,
NULL,
(HBRUSH)GetStockObject(BLACK_BRUSH),
NULL); CreateEx(
0,
className,
"OpenGL",
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
rect,
parent,
0);}void COpenGLControl::OnPaint()
{
rotation += 0.01f; if (rotation >= 360.0f)
{
rotation -= 360.0f;
} /** OpenGL section **/ openGLDevice.makeCurrent(); DrawGLScene();
}void COpenGLControl::OnSize(UINT nType, int cx, int cy)
{
CWnd::OnSize(nType, cx, cy);
if (cy == 0)
{
cy = 1;
}
glViewport(0,0,cx,cy); glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0f,1.0f,-1.0f,1.0f,1.0f,-1.0f);
// gluPerspective(45.0f,cx/cy,0.1f,100.0f); glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int COpenGLControl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
dc = new CClientDC(this); openGLDevice.create(dc->m_hDC);
InitGL(); return 0;
}BOOL COpenGLControl::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
GetDlgItem(IDC_OPENGL_WINDOW) 就是得到静态控件的指针!
其它的代码和平常的MFC下的GL无异.
按照文中:"在适当的地方调用m_openGL.RenderGLScene()就可以了"
我尝试在对话框中的OnPaint()中调用m_openGL.RenderGLScene()但是画不出图像。对话框打开时是出现一种忙的状态,但是却没有图像出现,然后一切都正常了,对话框还是原来的对话框,Static控件中一点图形也没有。
大侠们,救命啊!!!!!!!!!!!!!!!!!!!!!!!