PDA

Click to See Complete Forum and Search --> : Menu


CyberCarsten
Mar 1st, 2001, 11:49 AM
I'm using this code to show a menu, but it doesn't appear...


// INCLUDES ////////////////////
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#include <math.h>
#include "mymenu.h"
// DEFINES ////////////////////
// defines for windows
#define WINDOW_CLASS_NAME "WINCLASS1" // <------ WINDOW not WINDOWS
// GLOBALS ///////////////////
HWND main_window_handle = NULL; // save the window handle // <------ window not windows
// 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_AINT
HDC hdc;
// find out what the message is
switch(msg)
{
case WM_CREATE:
{

// do initialization stuff here
return(0);
} break;
case WM_PAINT:
{
// simply validate the window
hdc = BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps); // <------ needed a pointer
return(0);
} break;
case WM_DESTROY: // <------ spelling mistake
{

// kill the application
PostQuitMessage(0);
return(0);
} break;


default: break;
} // end switch
// process any messages that you didn't take care of
return (DefWindowProc(hwnd,msg,wparam,lparam));
} // end WinProc
// WINMAIN ///////////////////
int WINAPI WinMain(HINSTANCE hinstance,
HINSTANCE previnstance, // <------ spelling mistake
LPSTR lpcmdline,
int ncmdshow)
{
WNDCLASS winclass; // this will hold the class you create // <------ missing semicolon
HWND hwnd; // generic window handle
MSG msg; // generic message
// first, fill in the window class structure
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 = (HBRUSH)GetStockObject(BLACK_BRUSH); // <------ void* needs an explicit cast
winclass.lpszMenuName = NULL;
winclass.lpszClassName = WINDOW_CLASS_NAME;
// register the following class
if (!RegisterClass(&winclass))
return(0);
// create window
if (!(hwnd = CreateWindow(WINDOW_CLASS_NAME,
"Hello Carsten! The C++ Programmer!", // Title
WS_OVERLAPPEDWINDOW | WS_VISIBLE, // Flags
500,500, // x,y
320,200, // width, height
NULL, // Handle to parent
NULL, // Handle to menu
hinstance, // instance // <------ hinstance not hInstance
NULL))) // creation parameters
return(0);
// save the window handle in a global
main_window_handle = hwnd;
SetMenu(hwnd,LoadMenu(hinstance, "MYMENU"));
//enter main event loop
while(1)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
// test whether this is a quit
if (msg.message == WM_QUIT) break; // <------ typo
//translate any accelerator keys
TranslateMessage(&msg);
// send the message to the window proc
DispatchMessage(&msg);
} // end if
// main game processing here


} // end while
return(msg.wParam);
} // end WinMain

Technocrat
Mar 1st, 2001, 12:44 PM
Its kinda hard to tell from your code, but I am guessing you want your menu to be on you window so you need to change to:

This works if you have your menu as a resource.


winclass.lpszMenuName = NULL;
winclass.lpszMenuName = LoadMenu(hinstance, MAKEINTRESOURCE(IDI_YOURMENUNAME);


If not then you would have to use CreateWindowEX.

Also use:

case WM_COMMAND:
switch(LOWORD(wparam))
{
case IDR_YOURMENUCHOICE:
}


To run your code when a menu choice is made

CyberCarsten
Mar 1st, 2001, 12:52 PM
It generates errors....

Undefined symbol 'MYMENU' in WinMain

Technocrat
Mar 1st, 2001, 12:55 PM
umm yeah...........I put that so you could input your menu name.

Did you make your menu as a resource?

CyberCarsten
Mar 1st, 2001, 12:57 PM
Yes I did...

Technocrat
Mar 1st, 2001, 01:01 PM
Ok....I see now my bad. You need to add


#include "resource.h" //Or whatever your resource file header is called

CyberCarsten
Mar 1st, 2001, 01:02 PM
I have done that:

#include "mymenu.h"

Technocrat
Mar 1st, 2001, 01:04 PM
Can you post the code in mymenu.h

CyberCarsten
Mar 1st, 2001, 02:11 PM
Here you go! :)

// MYMENU.H - header with menu id's
// Notice the clean naming I used for the id's you
// can very quickly figure out the menu, sub menu, and item

#define ID_MYMENU_FILE_OPEN 1000
#define ID_MYMENU_FILE_CLOSE 1001
#define ID_MYMENU_FILE_EXIT 1002
#define ID_MYMENU_HELP_ABOUT 2000


Technocrat
Mar 1st, 2001, 03:26 PM
I dont see the define for the top level of the menu. Like my menu:


#define IDR_RCLKMENU 1
#define IDR_RCLKMENU_File_Open 100
#define IDR_RCLKMENU_File_Close 200
#define IDR_RCLKMENU_File_Exit 300


And thats what you would call:


winclass.lpszMenuName = LoadMenu(hinstance, MAKEINTRESOURCE(IDR_RCLKMENU);

CyberCarsten
Mar 2nd, 2001, 03:31 AM
Hi again!
Now I get another error:
Function call ) missing in function WinMain.
I don't know where to place the "close" )

Technocrat
Mar 2nd, 2001, 09:54 AM
Can you please post just your WinMain function