Results 1 to 40 of 72

Thread: Menus again...

Threaded View

  1. #1

    Thread Starter
    Frenzied Member CyberCarsten's Avatar
    Join Date
    Sep 1999
    Location
    Aalborg Ø, Denmark
    Posts
    1,544
    This code comes from a C++ book I'm currently reading, and it should show a menu....but it doesn't
    The .EXE file that is on the cd accompanied with the book uses this code, and it works fine...what is wrong???

    Code:
    // PROG6_2.CPP - basic menus
    
    // INCLUDES ///////////////////////////////////////////////
    #define WIN32_LEAN_AND_MEAN  
    
    #include <windows.h>  
    #include <windowsx.h> 
    #include <winuser.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include "mymenu.h"
    
    // DEFINES ////////////////////////////////////////////////
    
    // defines for windows 
    #define WINDOW_CLASS_NAME "WINCLASS1"
    #define WINDOW_WIDTH  320
    #define WINDOW_HEIGHT 200
    
    // GLOBALS ////////////////////////////////////////////////
    HWND main_window_handle = NULL; // save the window handle
    char buffer[80];                // used to print text
    
    // FUNCTIONS //////////////////////////////////////////////
    LRESULT CALLBACK WindowProc(HWND hwnd, 
    						    UINT msg, 
                                WPARAM wparam, 
                                LPARAM lparam)
    {
    // this is the main message handler of the system
    PAINTSTRUCT	ps;		   // used in WM_PAINT
    HDC			hdc;	   // handle to a device context
    
    // what is the message 
    switch(msg)
    	{	
    	case WM_CREATE: 
            {
    		// do initialization stuff here
    		return(0);
    		} break;
    
        // process menu messages
        case WM_COMMAND:
             {
             // get the dc
             hdc = GetDC(hwnd);
    
             // set the color
             SetTextColor(hdc,RGB(0,0,255));
             SetBkColor(hdc,RGB(0,0,0));
             SetBkMode(hdc,OPAQUE);
    
             // what menu item?
             switch(wparam)
                   {
                   case ID_MYMENU_FILE_OPEN: 
                        {
                        // print message
                        TextOut(hdc,0,100,"File->Open     ",strlen("File->Open     "));
                        } break;
                   case ID_MYMENU_FILE_CLOSE:  
                        {
                        // print message
                        TextOut(hdc,0,100,"File->Close     ",strlen("File->Close     "));
                        } break;
                   case ID_MYMENU_FILE_EXIT:   
                        { 
                        // terminate the application
                        PostMessage(hwnd,WM_DESTROY,0,0);
                        } break;
                   case ID_MYMENU_HELP_ABOUT:
                        {
                        // print message
                        TextOut(hdc,0,100,"Help->About     ",strlen("Help->About     "));    
                        
                        // put up a message box
                        MessageBox(hwnd,"Poor Man's About","About Menus",MB_OK);
    
                        } break;
               
                   default: break;
                   } // end switch
    
             // release the dc
             ReleaseDC(hwnd,hdc);
    
             // inform windows we handled message
             return(0);
             } break;
    
        case WM_PAINT:
             {
             // start painting
             hdc = BeginPaint(hwnd,&ps);
    
             // end painting
             EndPaint(hwnd,&ps);
             return(0);
            } break;
    
    	case WM_DESTROY: 
    		{
    		// kill the application			
    		PostQuitMessage(0);
    		return(0);
    		} break;
    
    	default:break;
    
        } // end switch
    
    // process any messages that we didn't take care of 
    return (DefWindowProc(hwnd, msg, wparam, lparam));
    
    } // end WinProc
    
    // WINMAIN ////////////////////////////////////////////////
    int WINAPI WinMain(	HINSTANCE hinstance,
    					HINSTANCE hprevinstance,
    					LPSTR lpcmdline,
    					int ncmdshow)
    {
    
    WNDCLASS winclass;	// this will hold the class we create
    HWND	 hwnd;		// generic window handle
    MSG		 msg;		// generic message
    HDC      hdc;       // generic dc
    PAINTSTRUCT ps;     // generic paintstruct
    
    // first fill in the window class stucture
    winclass.style			= CS_DBLCLKS | CS_OWNDC | 
                              CS_HREDRAW | CS_VREDRAW;
    winclass.lpfnWndProc	= WindowProc;
    winclass.cbClsExtra		= 0;
    winclass.cbWndExtra		= 0;
    winclass.hInstance		= hinstance;
    winclass.hIcon			= LoadIcon(NULL, IDI_APPLICATION);
    winclass.hCursor		= LoadCursor(NULL, IDC_ARROW);
    winclass.hbrBackground	= GetStockObject(BLACK_BRUSH);
    winclass.lpszMenuName	= NULL; 
    winclass.lpszClassName	= WINDOW_CLASS_NAME;
    
    // register the window class
    if (!RegisterClass(&winclass))
    	return(0);
    
    // create the window
    if (!(hwnd = CreateWindow(WINDOW_CLASS_NAME, // class
    						  "Basic Menus",	 // title
    						  WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    					 	  0,0,	   // x,y
    						  WINDOW_WIDTH,  // width
                              WINDOW_HEIGHT, // height
    						  NULL,	   // handle to parent 
    						  NULL,	   // handle to menu
    						  hinstance,// instance
    						  NULL)))	// creation parms
    return(0);
    
    // save the window handle in a global
    main_window_handle = hwnd;
    
    // load the menu in and attach it (method 3)
    SetMenu(hwnd,LoadMenu(hinstance, "MYMENU"));
    
    // enter main event loop
    while(1)
    	{
    	if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
    		{ 
    		// test if this is a quit
            if (msg.message == WM_QUIT)
               break;
    	
    		// translate any accelerator keys
    		TranslateMessage(&msg);
    
    		// send the message to the window proc
    		DispatchMessage(&msg);
    		} // end if
        
        // main game processing goes here
    
    	} // end while
    
    // return to Windows like this
    return(msg.wParam);
    
    } // end WinMain
    
    ///////////////////////////////////////////////////////////
    Last edited by CyberCarsten; Mar 2nd, 2001 at 09:50 AM.
    razor
    Software Engineer Student, Aalborg University, Denmark
    http://www.cs.auc.dk

    My email at AUC: will get a new email soon
    My website: http://www.razorsoftware.net


    Windows XP Pro/ Gentoo Linux (Laptop)
    Windows XP Pro (Home PC)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width