•
•
•
•
What is DaniWeb IT Discussion Community?
You're currently browsing the C++ section within the Software Development category of DaniWeb, a massive community of 403,077 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 3,066 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Please support our C++ advertiser: Programming Forums
The snippet shows how to create a menu on a windows form and test it. Original code via BCX, modified to compile with Dev C++ as a Windows Application. This approach does speed up writing of GUI programs.
// create a basic windows form with a menu // modified from BCX generated C code for Dev-C++ // a Dev-C++ tested Windows Application by vegaseat 04nov2004 #include <windows.h> #define ID_Exit 101 #define ID_Edit 201 #define ID_Load 301 #define ID_Save 302 static HINSTANCE BCX_hInstance; static int BCX_ScaleX; static int BCX_ScaleY; static char BCX_ClassName[2048]; // default size static HMENU MainMenu; // has to be HMENU type static HMENU FileMenu; // dito static HWND Form1; #define Show(Window) RedrawWindow(Window,0,0,0);ShowWindow(Window,SW_SHOW); HWND BCX_Form(char*,int=0,int=0,int=250,int=150,int=0,int=0); void FormLoad (void); BOOL AddMenu (HWND); LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); // this is the main() function under Windows GUI int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR CmdLine,int CmdShow) { WNDCLASS Wc; MSG Msg; // ***************************** strcpy(BCX_ClassName,"FORM3"); // ************************************ // Scale Dialog Units To Screen Units // (pixels have not been specified here) // ************************************ RECT rc = {0,0,4,8}; MapDialogRect (NULL,&rc); BCX_ScaleX = rc.right/2; BCX_ScaleY = rc.bottom/4; BCX_hInstance = hInst; // ****************************************************** Wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; Wc.lpfnWndProc = WndProc; Wc.cbClsExtra = 0; Wc.cbWndExtra = 0; Wc.hInstance = hInst; Wc.hIcon = LoadIcon(NULL,IDI_WINLOGO); Wc.hCursor = LoadCursor(NULL,IDC_ARROW); Wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1); Wc.lpszMenuName = NULL; Wc.lpszClassName = BCX_ClassName; RegisterClass(&Wc); FormLoad(); while(GetMessage(&Msg,NULL,0,0)) { HWND hActiveWindow = GetActiveWindow(); if (!IsWindow(hActiveWindow) || !IsDialogMessage(hActiveWindow,&Msg)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } } return Msg.wParam; } // create the windows form in style selected HWND BCX_Form(char *Caption, int X, int Y, int W, int H, int Style, int Exstyle) { HWND A; if (!Style) { Style= WS_MINIMIZEBOX | WS_SIZEBOX | WS_CAPTION | WS_MAXIMIZEBOX | WS_POPUP | WS_SYSMENU; } A = CreateWindowEx(Exstyle,BCX_ClassName,Caption, Style, X*BCX_ScaleX, Y*BCX_ScaleY, (4+W)*BCX_ScaleX, (12+H)*BCX_ScaleY, NULL,(HMENU)NULL,BCX_hInstance,NULL); SendMessage(A,(UINT)WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT), (LPARAM)MAKELPARAM(FALSE,0)); return A; } // the details like upper left corner coordinates, width, height ... // are in Dialog Units void FormLoad (void) { Form1=BCX_Form("A Form with a menu ...",20,10,200,100); AddMenu(Form1); Show(Form1); } BOOL AddMenu (HWND hwndOwner) { MainMenu=CreateMenu(); FileMenu=CreateMenu(); InsertMenu(MainMenu,ID_Edit,MF_POPUP,(UINT)FileMenu,"File"); AppendMenu(FileMenu,MF_STRING,ID_Load,"&Load"); AppendMenu(FileMenu,MF_STRING,ID_Save,"&Save"); AppendMenu(FileMenu,MF_SEPARATOR,0,""); AppendMenu(FileMenu,MF_STRING,ID_Exit,"E&xit"); // activate menu if (!SetMenu(hwndOwner,MainMenu)) { return FALSE; } return TRUE; } // standard windows message handler LRESULT CALLBACK WndProc (HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { while(1) { if (Msg==WM_COMMAND) { if (LOWORD(wParam)==ID_Exit) { PostQuitMessage(0); } // do something with other menu items here, // normally one calls up a file load/save dialog box if (LOWORD(wParam)==ID_Load) { SetWindowText(Form1,"Load ..."); } if (LOWORD(wParam)==ID_Save) { SetWindowText(Form1,"Save ..."); } return 0; break; } break; } // tidy up and exit the program via the form's upper left corner x if (Msg==WM_DESTROY) { UnregisterClass(BCX_ClassName,BCX_hInstance); PostQuitMessage(0); } return DefWindowProc(hWnd,Msg,wParam,lParam); } // ************************************************************* // Created with BCX -- The BASIC To C Translator (ver 5.02) // BCX (c) 1999, 2000, 2001, 2002, 2003, 2004 by Kevin Diggins // *************************************************************
Comments (Newest First)
vegaseat | Kickbutt Moderator | Dec 6th, 2004
Post Comment
•
•
•
•
DaniWeb Marketplace (Sponsored Links)
In the IDE go to FILE, then NEW, then Project, select Windows Application, give it a name (eg. Menu1) click OK A filesave dialog box comes up, create a new folder and save Menu1.dev there. The DevCpp IDE comes up with a template, select and delete that and cut and paste this code into the empty editor page. Now compile and run.