AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

如何在VC6或者VC7下用 ATL做一个OpenGL的(COM)控件?

51自学网 2015-08-30 http://www.wanshiok.com

目的:由于在写OpenGL程序的时候这些东西每次都要写一遍,而且特别繁琐!为了刚步入OpenGL人提供一个界面控件,让他们较早的看到自己写的OpenGL程序的效果!让他们觉得OpenGL的神奇!

作者:王卫星(wangweixing2000)

1, 新建一个ATL空项目(项目名OpenGL_ATL)

2, 添加一个ATL对象(MyControl)(VC6下为Full Control,VC7下为ATL控件)必须选中Support Connection Points为了添加事件。

3, 在对象的.H头文件中添加:

 #include <gl/gl.h>
#include <gl/glu.h>
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")

4, 在接口实现类添加一个OpenGL 的RC(rendering context)成员变量:

HGLRC m_hRC;
5, 添加一个设置OpenGL像素格式(接口实现类的)成员函数:

// Set OpenGL pixel format for given DC

BOOL MyControl::SetupPixelFormat(HDC hdc)

{

  static PIXELFORMATDESCRIPTOR pfd =

  {

    sizeof(PIXELFORMATDESCRIPTOR),  // size of this pfd

      1,              // version number

      PFD_DRAW_TO_WINDOW |     // support window

      PFD_SUPPORT_OPENGL |     // support OpenGL

      PFD_DOUBLEBUFFER,      // double buffered

      PFD_TYPE_RGBA,        // RGBA type

      24,             // 24-bit color depth

      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,             // 32-bit z-buffer

      0,              // no stencil buffer

      0,              // no auxiliary buffer

      PFD_MAIN_PLANE,       // main layer

      0,              // reserved

      0, 0, 0           // layer masks ignored

  };

  int pixelformat;



  if ((pixelformat = ChoosePixelFormat(hdc, &pfd)) == 0)

  {

    ATLASSERT(FALSE);

    return FALSE;

  }



  if (SetPixelFormat(hdc, pixelformat, &pfd) == FALSE)

  {

    ATLASSERT(FALSE);

    return FALSE;

  }



  return TRUE;

}

<

 

 

 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
上一篇:如何获取屏幕上各颜色的红、绿、蓝值  下一篇:一个功能强大的MFC界面处理扩展库:CJ60Lib