menu mit *.rc date wird nicht angezeigt
-
Sehe gerade, dass es über MAKEINTRESOURCE eigentlich doch gehen sollte
- hast du den den rc-File dem Projekt hinzugefügt?
-
Ich habe das jetzt mal mit dem devcpp kompiler probiert:
main:#include <windows.h> /* Declare Windows procedure */ LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); /* Make the class name into a global variable */ char szClassName[ ] = "WindowsApp"; #define mymenu 101 int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { HWND hwnd; /* This is the handle for our window */ MSG messages; /* Here messages to the application are saved */ WNDCLASSEX wincl; /* Data structure for the windowclass */ /* The Window structure */ wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */ wincl.style = CS_DBLCLKS; /* Catch double-clicks */ wincl.cbSize = sizeof (WNDCLASSEX); /* Use default icon and mouse-pointer */ wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = MAKEINTRESOURCE(mymenu); /* No menu */ wincl.cbClsExtra = 0; /* No extra bytes after the window class */ wincl.cbWndExtra = 0; /* structure or the window instance */ /* Use Windows's default color as the background of the window */ wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND; /* Register the window class, and if it fails quit the program */ if (!RegisterClassEx (&wincl)) return 0; /* The class is registered, let's create the program*/ hwnd = CreateWindowEx ( 0, /* Extended possibilites for variation */ szClassName, /* Classname */ "Windows App", /* Title Text */ WS_OVERLAPPEDWINDOW, /* default window */ CW_USEDEFAULT, /* Windows decides the position */ CW_USEDEFAULT, /* where the window ends up on the screen */ 544, /* The programs width */ 375, /* and height in pixels */ HWND_DESKTOP, /* The window is a child-window to desktop */ NULL, /* No menu */ hThisInstance, /* Program Instance handler */ NULL /* No Window Creation data */ ); /* Make the window visible on the screen */ ShowWindow (hwnd, nFunsterStil); /* Run the message loop. It will run until GetMessage() returns 0 */ while (GetMessage (&messages, NULL, 0, 0)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); } /* The program return-value is 0 - The value that PostQuitMessage() gave */ return messages.wParam; } /* This function is called by the Windows function DispatchMessage() */ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) /* handle the messages */ { case WM_DESTROY: PostQuitMessage (0); /* send a WM_QUIT to the message queue */ break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0; }mymenu.rc:
mymenu MENU DISCARDABLE BEGIN POPUP "Datei" BEGIN MENUITEM "Neu", 208 MENUITEM "Öffnen...", 207 MENUITEM "Speichern unter...", 206 MENUITEM SEPARATOR MENUITEM "Beenden", 205 END POPUP "Eigenschaften" BEGIN MENUITEM "Schriftart ändern", 204 MENUITEM "Schriftfarbe ändern", 203 MENUITEM "Hintergrundfarbe ändern", 202 END POPUP "Über ..." BEGIN MENUITEM "Version", 201 END ENDErgebnis: funktioniert nicht.
-
wincl.lpszMenuName = "mymenu";(getestet)
-
ich auch.
Ergebnis: funktioniert nicht!
-
da hast du auch keine Header mit den defines, bzw. "mymenu" besitzt keinen wert
den der compiler identifizieren kann.
Lese mal diesen FAQ-Beitrag so ab der mitte, verwendung von Resourcen, klappt
beim Dev so wie es da steht, ich verwende diesen auch.
Wenn doch mal dann was nicht klappt oder verstehst, dann Fragen, aber bitte mit Compiler-fehlermeldung, ist einfacher dann.
-
Es geht aber trotzdem. Man muss dann aber eben mymenu als String benutzen und nicht als ID. Ich habs ja getestet und bei mir wurde das Menü angezeigt.
-
Mic.. du bist geil^^.
und über die Projekt-Optionen sollte
sichergestellt werden das diese auch in die Kompilation einbezogen istProject/Project Options/Files/mymenu.rc
->include in compilationMuss man des auch bei dem mfc++ einstellen?
- weil es da auch nicht funktionierte
-
klappt nun auch mit mvc++.
Aber kann es sein das diese *.h datei immer "resource.h" heißen muss?
- weil wenn ich diese anders nenne, kommt eine fehlermeldung in der *.rc Datei:fatal error RC1004: unexpected end of file found
-
Hört sich eher nach einem Syntax-Fehler an

-
wieso funktioniert LoadMenu() nicht?:
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("dasmenu") ; HWND hwnd ; MSG msg ; WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = /*"mymenu"*/NULL; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { // UNICODE-Compilierung ist die einzige realistische Fehlermöglichkeit MessageBox (NULL, TEXT ("Programm arbeitet mit Unicode und setzt Windows NT voraus!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow (szAppName, // Name der Fensterklasse TEXT ("Das erste echte Programm"), // Fenstertitel WS_OVERLAPPEDWINDOW, // Fensterstil CW_USEDEFAULT, // X-Position des Fensters CW_USEDEFAULT, // Y-Position des Fensters CW_USEDEFAULT, // Fensterbreite CW_USEDEFAULT, // Fensterhöhe NULL, // übergeordnetes Fenster 0, // Menü hInstance, // Programm-Kopiezähler (Programm-ID) NULL) ; // zusätzliche Parameter ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; LoadMenu(hInstance,"mymenu");//<<<<<<<<<<<<< while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; }
-
wndclass.lpszMenuName = "mymenu";müsste eigentlich funktionieren
und loadmenu lässt du komplett weg.
-
ich will es aber mit loadmenu machen!
-> viele wege führennach rom, nicht nur einer..wäre ja schlimm
-
dann müsstest du beim dritt letzten parameter von createwindow dein loadmenu schreiben. (nicht getestet und weis auch nicht ob es funktioniert)
-
glaube kaum das es dahin kommt, da loadmenu für dynamisches zeugs da ist
-
SetMenu