Click here to Skip to main content
14,981,622 members
Articles / Multimedia / OpenGL
Posted 30 Nov 1999


54 bookmarked

CGLEnabledView - An MDI view class supporting OpenGL

Rate me:
Please Sign up or sign in to vote.
4.77/5 (26 votes)
30 Nov 19992 min read
A plug-in view class that provides OpenGL support
  • Download demo project - 82 Kb
  • Download source files - 15 Kb
  • Sample Image - glenabledview.gif

    What is it

    CGEnabledView is a view class designed to wrap all OpenGL stuff (initialization, managing of Rendering Contexts and palettes, destruction, etc.) allowing the creation of multiple views in a MDI application.

    CGEnabledView also offers these basic services:

    • a function to get various information about the OpenGL implementation which is currently being used (separate information for the OPENGL and GLU libraries).
    • manages internally the creation of display lists and offers a primitive interface for display lists execution.
    • defines mouse cursor to be used inside the views.
    • offers an object oriented encapsulation of quadric objects for drawing of spheres, cylinders and disks.
    • offers an object oriented encapsulation of glu tessellator routines for translating non simple polygons (concave, self-intersecting and with holes) in groups of simple ones (triangle strips and fans).
    • presents a simple interface to draw text strings as 2D bitmaps or complete 3D glyphs.


    This article uses the trackball code introduced in the companion article A virtual trackball rotation controller .

    To start experimenting OpenGL drawing you just need to follow these steps:

    1. Use AppWizard to geneate an MDI project.
    2. Substitute CView with CGLEnabledView in [YourProject]View.cpp and [YourProject]View.h.
    3. Use ClassWizard to remove the OnDraw and PreCreateWindow functions (delete the bodies too).
    4. Override the VideoMode function if you need to ask for a particular combination of color-buffer depth,depth-buffer depth and double-buffering mode.
    5. Override the OnCreateGL if you need to perform some initializations
    6. Override the OnDrawGL function and issue some GL calls.
    7. Remember to link OpenGL libraries (look at the top of GLEnabledView.cpp for explanations) before building your project.

    Since it's not adviseable to mix Windows GDI and OpenGL drawing commands some WM handlers have been made private, use the overridable virtual functions instead.
    Other details are in the demo code (wich should be well commented) which can be used as a good starting point.

    The Demo

    In the sample project you can open multiple views each presenting a sample scene and rotate them interactively with the mouse. You can get some information about OpenGL implementation via the Help/View OGL Info menu item. Look at the about dialog box for some shortcut-keys.
    This demo project shows the use of a virtual trackball controller which permits to rotate the scene as if you are manipulating a virtual sphere superimposed on the application child window.


    This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

    A list of licenses authors might use can be found here


    About the Author

    Alessandro Falappa
    Software Developer (Senior)
    Italy Italy
    Living in Rome, Italy
    Computer addict since 12 years old (first computer: Commodore 64).
    Master degree in Computer Science.
    Very interested in computer generated graphics both real time (mainly OpenGL) and photorealistic rendering.

    Comments and Discussions

    BugCGLEnabledView.cpp Pin
    The_Inventor2-Mar-19 0:51
    MemberThe_Inventor2-Mar-19 0:51 
    PraiseRe: CGLEnabledView.cpp Pin
    Southmountain31-May-21 11:02
    MemberSouthmountain31-May-21 11:02 
    Generalpainting flaw Pin
    jldavis2-Oct-08 12:17
    Memberjldavis2-Oct-08 12:17 
    Generalrotation not around 0,0,0 Pin
    mimosa26-Sep-08 23:44
    Membermimosa26-Sep-08 23:44 
    Questionc# Pin
    Tonnek9-Oct-07 11:45
    MemberTonnek9-Oct-07 11:45 
    GeneralHi,dear Alessandro,I have some question about your artics Pin
    aqing1-Jul-04 7:20
    Memberaqing1-Jul-04 7:20 
    GeneralHi,dear Alessandro,I have some question about your artics Pin
    aqing1-Jul-04 7:20
    Memberaqing1-Jul-04 7:20 
    QuestionExcellence! How did you make the text output in the scene? Pin
    aqing27-Jun-04 5:59
    Memberaqing27-Jun-04 5:59 
    QuestionHow to run 2 different(or same) OpenGL objects in one DialogBox? Pin
    werter13-May-04 21:09
    Memberwerter13-May-04 21:09 
    GeneralRedrawing without re-rendering Pin
    Phil Atkin29-Aug-03 2:11
    MemberPhil Atkin29-Aug-03 2:11 
    GeneralRe: Redrawing without re-rendering Pin
    Alessandro Falappa31-Aug-03 23:58
    MemberAlessandro Falappa31-Aug-03 23:58 
    Generalan excellent pointer Pin
    nobody@yahoo.com23-May-03 0:19
    Membernobody@yahoo.com23-May-03 0:19 
    GeneralHelp me Pin
    rockers13-Apr-03 6:54
    Memberrockers13-Apr-03 6:54 
    GeneralMDI & OpenGL Pin
    uNsignedINT22-Mar-03 12:06
    MemberuNsignedINT22-Mar-03 12:06 
    QuestionCan't run debugger with the code??? Pin
    Anonymous27-Oct-02 0:39
    MemberAnonymous27-Oct-02 0:39 
    GeneralVery Impressive Pin
    Member 5071815-Oct-02 0:23
    MemberMember 5071815-Oct-02 0:23 
    GeneralTextures Pin
    ste26-Aug-02 3:34
    Memberste26-Aug-02 3:34 
    Generalsave the OpenGL view Pin
    bluntagain8-May-02 9:07
    Memberbluntagain8-May-02 9:07 
    GeneralRe: save the OpenGL view Pin
    kooktroop11-Oct-03 22:32
    Memberkooktroop11-Oct-03 22:32 
    Generaltitle bar Pin
    redspy4-Apr-02 3:00
    Memberredspy4-Apr-02 3:00 
    GeneralRe: title bar Pin
    dineshkumarkataria7-Oct-08 3:22
    Memberdineshkumarkataria7-Oct-08 3:22 
    GeneralVery helpful Pin
    18-Feb-02 2:53
    suss18-Feb-02 2:53 
    GeneralHelp!!! in Fill Contour Pin
    15-Oct-01 5:23
    suss15-Oct-01 5:23 
    GeneralBeware: PrepareCharset2D() Pin
    Kristian Nilssen30-Aug-01 5:29
    MemberKristian Nilssen30-Aug-01 5:29 
    GeneralMemory overflow when opening lots of documents Pin
    8-Jun-01 7:53
    suss8-Jun-01 7:53 

    General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

    Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.