DarkWinAPI by Darkleo.com

Menü Einbindung in ein Programm.

1.Man Erstellt in einer HM.rc Datei ein Menü.
2.Für die Menüpunkte erstellt man eine Header Datei res.h.
3.Um das ganze einbinden zu können muss im Programm.

USERC("HM.rc");
und zwei header Dateien einbinden
#include "res.h"
#include <vcl.h> // wird nur bei Borland includiert.

4.in der Funktion RegisterMainWindow in der WNDCLASS
definition muss der Menüname eingetragen werden.

wg.lpszMenuName = TEXT("HAUPTMENU");

5.Verarbeitung von Menü Botschaften.
Anklicken eines Menüs oder änlicher Objekte wie z.B. Listbox lösen eine WM_COMMAND Botschaft aus, die aus HIWORD und
LOWORD als Parameter wParam enthalten.

wenn HIWORD(wParam) == 0 ist dann ist es ein Menü
die LOWORD(wParam) Parameter sind Relativ d.h. sie sind beliebig definierbar in der Header Datei.

#define IDM_END         3
#define IDM_ABOUT    4

 

HM.rc
#include "res.h"

HAUPTMENU MENU DISCARDABLE
BEGIN
   POPUP "&Datei"
   BEGIN
      MENUITEM "&Neu" IDM_NEW
      MENUITEM "&Open" IDM_OPEN
      MENUITEM SEPARATOR
      MENUITEM "&Beenden" IDM_END
   END
   POPUP "&About"
   BEGIN
      MENUITEM "&Info" IDM_ABOUT
   END
END

andere Schreibweise

#include <windows.h>
#include "res.h"

HAUPTMENU MENU
{
POPUP "&Datei"
{
      MENUITEM "&Neu" ,IDM_NEW
      MENUITEM "&Open" ,IDM_OPEN
      MENUITEM SEPARATOR
      MENUITEM "&Beenden" ,IDM_END
}
POPUP "&About"
{
      MENUITEM "&Info" ,IDM_ABOUT
}
}

 

res.h
#define IDM_NEW        1
#define IDM_OPEN       2
#define IDM_END         3
#define IDM_ABOUT    4

 

MenuProgramm.cpp
#define STRICT
#define WIN32_LEAN_AND_MEAN

#include <windows.h>
#include <windowsx.h>

#include "res.h"
#include <vcl.h>

//----------------------- RC-Datei Einbinden ------------------------------
USERC("HM.rc"); //ist bei VC++ anders, einfach zum Projekt Hinzufügen
//---------------------------------------------------------------------------
static HINSTANCE hInstance;
static HWND hwndMain;

static TCHAR szMainWndClass[] = TEXT("HaupttextfensterKlasse");
static TCHAR szHalloMsg[] = TEXT("TEST");

static void WmPaint(HWND hwnd)
{
PAINTSTRUCT ps;
HDC hdc;

hdc = BeginPaint(hwnd, &ps);
TextOut(hdc,100, 100, szHalloMsg, lstrlen(szHalloMsg));
EndPaint(hwnd, &ps);
}

static LRESULT WINAPI Hauptfensterprozedur(HWND hwnd,
UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
 case WM_COMMAND:
 switch(HIWORD(wParam))
 {
  case 0:
  switch(LOWORD(wParam))
  {
   case IDM_END:
   SendMessage(hwnd,WM_CLOSE,0,0);
   break;
   case IDM_ABOUT:
   MessageBox(NULL,"Darkleos Api Programm","About",MB_OK);
   break;
  }
  break;
}
 break;
case WM_DESTROY:
 PostQuitMessage(0);
return 0;
case WM_PAINT:
 return HANDLE_WM_PAINT(hwnd, wParam, lParam, WmPaint);
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

static BOOL RegisterMainWindow(void)
{
WNDCLASS wg;
wg.style = 0;
wg.lpfnWndProc = Hauptfensterprozedur;
wg.cbClsExtra = 0;
wg.cbWndExtra = 0;
wg.hInstance = hInstance;
wg.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wg.hCursor = LoadCursor(NULL, IDC_ARROW);
wg.hbrBackground= GetSysColorBrush(COLOR_WINDOW);
wg.lpszMenuName = TEXT("HAUPTMENU");
wg.lpszClassName=szMainWndClass;
return RegisterClass(&wg)!=0;
}

static BOOL CreateMainWindow(void)
{
hwndMain =CreateWindowEx(
WS_EX_CLIENTEDGE,
szMainWndClass,
TEXT("Hallo Darkleo Menü"),
WS_OVERLAPPEDWINDOW,
100,100,300,200,
(HWND)NULL,
(HMENU)NULL,
hInstance,
NULL);
return hwndMain !=NULL;
}

int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpszCmdLine, int nCmdShow)
{
MSG msg;
hInstance=hinst;

if(!RegisterMainWindow()) return 0;
if(!CreateMainWindow()) return 0;

ShowWindow(hwndMain, nCmdShow);
UpdateWindow(hwndMain);

while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}

Projekt Downloaden hier