Results 1 to 4 of 4

Thread: How can i create menu

  1. #1
    Guest

    How can i create menu

    Hi,
    I want to create two menu's(color,with 8 colors & tools, with four tools)Just like microsoft paint.So whenever i click the color menu the selection window should pop up so that i can select a color.Same with the tools menu.Could somebody help me with the code please.
    Thanks,
    Xhang

  2. #2
    Senior Member Regular Contributor
    Join Date
    Aug 2000
    Location
    Turin
    Posts
    258

    Re: How can i create menu

    It's not a beginner thing, U need to do everything by yourself.
    Just some hints to start from :

    Find some examples/docs on BILLBOARDING (it also helps displaying texts).

    And find some samples/docs on PICKING.

    The rest should come himself, u have the routines to draw rectangles/texts and routines to chek where the user clicked.


    rIO.sK http://www.spinningkids.org/umine
    [rIO^sPINNING kIDS] - rio@nospam.spinningkids.org

    -/- This is a signature virus. Add it to your signature. Help it spreading! -/-

  3. #3
    Member Contributor
    Join Date
    Oct 2000
    Location
    london, england
    Posts
    76

    Re: How can i create menu

    Hi I have a sample code for just that copy paste and compile.

    have fun Zee

    #pragma hdrstop
    #include <condefs.h>

    #include <windows.h>
    #include <glut.h>
    /* ========== ========== ========== ========== ========== ========== */

    /*
    * A demonstration painting program for IM211 and MA8
    *
    * Based on Interactive Computer Graphics
    * E. Angel
    * Chapter 3 and Appendix A.3
    *
    * 1. How to set up menus and submenus.
    * 2. How to set up colours.
    * 3. How to determine and use the position of the mouse.
    */


    USELIB("Glut32.lib");
    //---------------------------------------------------------------------------
    void ColourMenu( int id ) ;
    void Display ( void ) ;
    void DrawSquare( int x, int y ) ;
    void FillMenu ( int id ) ;
    void Mouse ( int btn, int state, int x, int y ) ;
    void MyInit ( void ) ;
    int Pick ( int x, int y ) ;
    void PixelMenu ( int id ) ;
    void Reshape ( int w, int h ) ;
    void RightMenu ( int id ) ;
    void ScreenBox ( int x, int y, int size ) ;

    /* end of function prototypes */

    /* global variables */


    int fill = 0 ;
    GLfloat r = 1.0,
    g = 1.0,
    b = 1.0 ;
    GLfloat size = 3.0 ; /* half side of square */
    GLsizei wh = 250 ; /* initial height of window */
    GLsizei ww = 250 ;

    void ColourMenu( int id ) {

    /*
    * sets the red, green, and blue components
    *for the appropriate menu selection.
    */

    if ( 1 == id )
    { r = 1.0 ; g = 0.0 ; b = 0.0 ; }
    else if ( 2 == id )
    { r = 0.0 ; g = 1.0 ; b = 0.0 ; }
    else if ( 3 == id )
    { r = 0.0 ; g = 0.0 ; b = 1.0 ; }
    else if ( 4 == id )
    { r = 0.0 ; g = 1.0 ; b = 1.0 ; }
    else if ( 5 == id )
    { r = 1.0 ; g = 0.0 ; b = 1.0 ; }
    else if ( 6 == id )
    { r = 1.0 ; g = 1.0 ; b = 0.0 ; }
    else if ( 7 == id )
    { r = 1.0 ; g = 1.0 ; b = 1.0 ; }
    else if ( 8 == id )
    { r = 0.0 ; g = 0.0 ; b = 0.0 ; }

    } /* end of function ColourMenu */

    void Display( void ) {

    /*
    * sets up a cleared display window with
    * the tool bar containing icons.
    */

    glPushAttrib( GL_ALL_ATTRIB_BITS ) ; /* save attributes */

    glClearColor( 0.0, 0.0, 0.0, 1.0 ) ;
    glClear ( GL_COLOR_BUFFER_BIT ) ;

    /* place tool bar */
    glColor3f( 1.0, 1.0, 1.0 ) ;
    ScreenBox( 0, wh - ww/10, ww/10 ) ;

    glColor3f( 1.0, 0.0, 0.0 ) ;
    ScreenBox( ww/10, wh - ww/10, ww/10 ) ;

    glColor3f( 0.0, 1.0, 0.0 ) ;
    ScreenBox( ww/5, wh - ww/10, ww/10 ) ;

    glColor3f( 0.0, 0.0, 1.0 ) ;
    ScreenBox( 3*ww/10, wh - ww/10, ww/10 ) ;

    /* place icons */
    glColor3f( 0.0, 0.0, 0.0 ) ;
    ScreenBox( ww/10 + ww/40, wh - ww/10 + ww/40, ww/20 ) ;

    glBegin( GL_LINES ) ;
    glVertex2i( wh/40, wh - ww/20 ) ;
    glVertex2i( wh/40 + ww/20, wh - ww/20 ) ;
    glEnd() ;

    glBegin( GL_TRIANGLES ) ;
    glVertex2i( ww/5 + ww/40 , wh - ww/10 + ww/40 ) ;
    glVertex2i( ww/5 + ww/20 , wh - ww/40 ) ;
    glVertex2i( ww/5 + 3*ww/40, wh - ww/10 + ww/40 ) ;
    glEnd() ;

    glPointSize( 5.0 ) ;
    glBegin( GL_POINTS ) ;
    glVertex2i( 3*ww/10 + ww/20, wh - ww/20 ) ;
    glEnd() ;

    glFlush() ;

    glPopAttrib() ; /* restore attributes */

    } /* end of function Display */


    void DrawSquare( int x, int y ) {

    /*
    * draws a square using a randomly chosen colour.
    */

    y = wh - y ;
    glColor3ub( (GLubyte)rand()%256,
    (GLubyte)rand()%256,
    (GLubyte)rand()%256 ) ;

    glBegin( GL_POLYGON ) ;
    glVertex2f( x + size, y + size ) ;
    glVertex2f( x - size, y + size ) ;
    glVertex2f( x - size, y - size ) ;
    glVertex2f( x + size, y - size ) ;
    glEnd() ;
    glFlush() ;

    } /* end of function DrawSquare */

    void FillMenu( int id ) {

    /*
    *sets the global fill flag.
    */

    if ( 1 == id )
    fill = 1 ;
    else if ( 2 == id )
    fill = 0 ;

    } /* end of function FillMenu */


    void Mouse( int btn, int state, int x, int y ) {

    /*
    * determines the action to be taken based on the
    * position of the mouse.
    *
    * drawMode identifies the tool chosen
    * 1 = line, 2 = square, 3 = triangle, 4 = pixel
    *
    * count marks the number of points already chosen
    * in specifying a square, triangle, etc.
    */

    static int count ;
    static int drawMode = 0 ;
    static int xp[2], yp[2] ;

    int where ;

    if( GLUT_LEFT_BUTTON == btn && GLUT_DOWN == state ) {
    glPushAttrib( GL_ALL_ATTRIB_BITS ) ;

    where = Pick( x, y ) ;
    glColor3f( r, g, b ) ;

    if ( where != 0 ) {
    count = 0 ;
    drawMode = where ;
    }
    else if ( 1 == drawMode && 0 == count ) {
    count = 1 ;
    xp[0] = x ;
    yp[0] = y ;
    }
    else if ( 1 == drawMode && 0 != count ) {
    glBegin( GL_LINES ) ;
    glVertex2i( x , wh - y ) ;
    glVertex2i( xp[0], wh - yp[0] ) ;
    glEnd() ;
    count = 0 ;
    drawMode = 0 ;
    }
    else if ( 2 == drawMode && 0 == count ) {
    count = 1 ;
    xp[0] = x ;
    yp[0] = y ;
    }
    else if ( 2 == drawMode && 0 != count ) {
    if ( fill )
    glBegin( GL_POLYGON ) ;
    else
    glBegin( GL_LINE_LOOP ) ;

    glVertex2i( x , wh - y ) ;
    glVertex2i( x , wh - yp[0] ) ;
    glVertex2i( xp[0], wh - yp[0] ) ;
    glVertex2i( xp[0], wh - y ) ;
    glEnd() ;
    count = 0 ;
    drawMode = 0 ;
    }
    else if ( 3 == drawMode && 0 == count ) {
    count = 1 ;
    xp[0] = x ;
    yp[0] = y ;
    }
    else if ( 3 == drawMode && 1 == count ) {
    count = 2 ;
    xp[1] = x ;
    yp[1] = y ;
    }
    else if ( 3 == drawMode && 2 == count ) {
    if ( fill )
    glBegin( GL_POLYGON ) ;
    else
    glBegin( GL_LINE_LOOP ) ;

    glVertex2i( xp[0], wh - yp[0] ) ;
    glVertex2i( xp[1], wh - yp[1] ) ;
    glVertex2i( x , wh - y ) ;
    glEnd() ;
    count = 0 ;
    drawMode = 0 ;
    }
    else if ( 4 == drawMode ) {
    DrawSquare( x, y ) ;
    }

    glFlush() ;
    glPopAttrib() ;

    }

    } /* end of function Mouse */

    void MyInit( void ) {

    glViewport( 0, 0, ww, wh ) ;

    glMatrixMode( GL_PROJECTION ) ;
    glLoadIdentity() ;
    gluOrtho2D( 0.0, (GLdouble)ww, 0.0, (GLdouble)wh ) ;

    glMatrixMode( GL_MODELVIEW ) ;
    glLoadIdentity() ;

    glClearColor( 0.0, 0.0, 0.0, 1.0 ) ;
    glClear( GL_COLOR_BUFFER_BIT ) ;

    glFlush() ;

    } /* end of function MyInit */

    int Pick ( int x, int y ) {

    /*
    * returns token picked by mouse.
    *
    * 0 => no selection
    * 1 - 4 identify the tools from left to right.
    */

    y = wh - y ;
    if ( y < wh - ww/10 )
    return 0 ;
    else if ( x < ww/10 )
    return 1 ;
    else if ( x < ww/5 )
    return 2 ;
    else if ( x < 3*ww/10 )
    return 3 ;
    else if ( x < 2*ww/5 )
    return 4 ;
    else
    return 0 ;

    } /* end of function Pick */

    void PixelMenu( int id ) {

    if ( 1 == id )
    size = size * 2.0 ;
    else if ( 2 == id )
    size = size / 2.0 ;

    } /* end of function PixelMenu */

    void Reshape( int w, int h ) {

    glMatrixMode( GL_PROJECTION ) ;
    glLoadIdentity() ;
    gluOrtho2D( 0.0, (GLdouble)w, 0.0, (GLdouble)h ) ;

    glMatrixMode( GL_MODELVIEW ) ;
    glLoadIdentity() ;

    glViewport( 0, 0, w, h ) ;
    glClearColor( 1.0, 1.0, 1.0, 1.0 ) ;
    glClear( GL_COLOR_BUFFER_BIT ) ;

    glFlush() ;

    wh = h ;
    ww = w ;

    } /* end of function Reshape */

    void RightMenu( int id ) {

    if( 1 == id )
    exit( 0 ) ;
    else if ( 2 == id )
    glutPostRedisplay() ;

    } /* end of function RightMenu */

    void ScreenBox( int x, int y, int size ) {

    glBegin( GL_POLYGON ) ;
    glVertex2i( x , y ) ;
    glVertex2i( x + size, y ) ;
    glVertex2i( x + size, y + size ) ;
    glVertex2i( x , y + size ) ;
    glEnd() ;

    } /* end of function ScreenBox */

    #pragma argsused
    int main(int argc, char **argv)
    {
    int cMenu ; // handle for colour menu
    int pMenu ;
    int fMenu ;

    glutInit ( &argc, argv ) ;
    glutInitDisplayMode ( GLUT_SINGLE | GLUT_RGB ) ;
    glutInitWindowSize ( ww, wh ) ;
    glutInitWindowPosition ( 50, 50 ) ;
    glutCreateWindow ( "Graphic Paint" ) ;

    glutDisplayFunc ( Display ) ;

    cMenu = glutCreateMenu( ColourMenu ) ;
    glutAddMenuEntry( "Red" , 1 ) ;
    glutAddMenuEntry( "Green" , 2 ) ;
    glutAddMenuEntry( "Blue" , 3 ) ;
    glutAddMenuEntry( "Cyan" , 4 ) ;
    glutAddMenuEntry( "Magenta" , 5 ) ;
    glutAddMenuEntry( "Yellow" , 6 ) ;
    glutAddMenuEntry( "White" , 7 ) ;
    glutAddMenuEntry( "Black" , 8 ) ;

    pMenu = glutCreateMenu( PixelMenu ) ;
    glutAddMenuEntry( "Increase size", 1 ) ;
    glutAddMenuEntry( "Decrease size", 2 ) ;

    fMenu = glutCreateMenu( FillMenu ) ;
    glutAddMenuEntry( "Fill on" , 1 ) ;
    glutAddMenuEntry( "Fill off" , 2 ) ;

    glutCreateMenu( RightMenu ) ;
    glutAddMenuEntry( "Quit" , 1 ) ;
    glutAddMenuEntry( "Clear" , 2 ) ;
    glutAddSubMenu( "Colours" , cMenu ) ;
    glutAddSubMenu( "Pixel size" , pMenu ) ;
    glutAddSubMenu( "Fill" , fMenu ) ;
    glutAttachMenu( GLUT_RIGHT_BUTTON ) ;

    MyInit() ;

    glutReshapeFunc ( Reshape ) ;
    glutMouseFunc ( Mouse ) ;

    glutMainLoop() ;

    return 0;
    }
    Later

    Zee

  4. #4
    Member Contributor
    Join Date
    Oct 2000
    Location
    london, england
    Posts
    76

    Re: How can i create menu

    P.S

    It was done in borland C++
    u may have to modify abit.
    Later

    Zee

Similar Threads

  1. How do I create a menu level in opengl using glew?
    By Cubby208 in forum OpenGL: Basic Coding
    Replies: 7
    Last Post: 05-25-2015, 01:35 AM
  2. Problem to create a triangle or square with menu
    By neo87 in forum OpenGL: Basic Coding
    Replies: 5
    Last Post: 03-09-2011, 03:04 PM
  3. How to create menu using opengl??
    By Totti in forum OpenGL: Basic Coding
    Replies: 3
    Last Post: 01-07-2007, 06:42 AM
  4. how can i create a pop up menu
    By in forum OpenGL: Basic Coding
    Replies: 1
    Last Post: 01-25-2001, 05:42 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Proudly hosted by Digital Ocean