Anfängerproblem mit Menü
-
SERVUS.
füg doch mal folgende zeile ein, und zwar vor der if-anweisung.
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
-
IDM_MENU1 sollte auf einen Eintrag in der rc-Datei verweisen:
z.B.:
IDM_MENU1 MENU DISCARDABLE BEGIN POPUP "&Datei" BEGIN MENUITEM "&Neu\tStrg+N", IDM_FILE_NEW, GRAYED MENUITEM "Ö&ffnen...\tStrg+O", IDM_FILE_OPENDie Menues stehen dann in der resource.h :
#define IDM_FILE_NEW 40077 #define IDM_FILE_OPEN 40078 ...Wenn hier in der Zuornung was nicht stimmt, kann Windows das Programm nicht registrieren.
Mitif (!RegisterClass (&wc)) { LPVOID lpMsgBuf; FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError (), MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL); MessageBox (NULL, (LPCTSTR)lpMsgBuf, "Error RegisterClass Main Window:", MB_OK | MB_ICONSTOP); LocalFree (lpMsgBuf); return FALSE; }kann man sich den Fehler detaillierte ausgeben lassen.
Blackbird
-
@Blackbird
Welches IDM-Menu1 sollte diesen .rc-Verweis enthalten, die resource.h oder der
cpp-Code?
Meine .rc-Datei sieht so aus:[code] #include "resource.h" LANGUAGE LANG_GERMAN,SUBLANG_GERMAN IDM_MENU1 MENU DISCARDABLE { POPUP "&Datei" { MENUITEM "&Öffnen", 102 MENUITEM "&Speichern", 103 MENUITEM SEPARATOR MENUITEM "&Beenden", 108 } POPUP "&Hilfe" { MENUITEM "&Über", 903 } } STRINGTABLE LANGUAGE LANG_GERMAN, SUBLANG_GERMAN { 102, "Datei öffnen" 103, "Datei Speichern" 108, "Programm Beenden" 903, "Infos zum Programm" } [/code]Und hier noch meine resource.h:
#define IDM_MENU1 1 #define IDS_STRING_OPEN 102 #define IDS_STRING_SAVE 103 #define IDS_STRING_EXIT 108 #define IDS_STRING_ABOUT 903 #define IDM_FILE_OPEN 102 #define IDM_FILE_SAVE 103 #define IDM_FILE_EXIT 108 #define IDM_HELP_ABOUT 903Die Datei wurde mit Borland Resource Workshop erstellt, daher die Klammern statt "BEGIN" und "END".
Ich habe mal Deinen Zusatzcode bei mir eingefügt. Da bekomme ich die MessageBox "Das System kann die angegebene Datei nicht finden". Scheint also doch ein fehlender Datei-Verweis zu sein.
-
*guckt sich den Code sehr genau an*
hinter dem if(...) ist ein Semikolon zu viel - dadurch steht der anschließende Programmblock für sich alleine (das if() kontrolliert eine leere Anweisung).
-
Ja, das war es.
Au, ist das blöd.Tja, nun erhalte ich immerhin eine schwarze DOS-Box und einen Ausnahmefehler :p

Muß wohl noch ein bißchen tüfteln. Aber danke für die Hilfe!!!
-
wegen der schwarzen dos-box:
das projekt ist warscheinlich als dos-box-projekt, nicht winapi-projekt erstellt
-
Nein, im TargetExpert und in der Projektdatei ist "GUI" eingestellt. Außerdem würde der Compiler einen "unresolved external "main" ect..."-Fehler von sich geben.
Ich vermute, es liegt irgendwo bei CreateWindowEx.
Hier mal der Rest des Progs, (weil ihr so hilfsbereit seid
)if (!RegisterClassEx (&wc))//Meldet das Fenster im Fenstermanager bei Windows an. { LPVOID lpMsgBuf; FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError (), MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL); MessageBox (NULL, (LPCTSTR)lpMsgBuf, "Error RegisterClass Main Window:", MB_OK | MB_ICONSTOP); LocalFree (lpMsgBuf); return FALSE; } hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, szAppName, "erstes Menü", WS_OVERLAPPEDWINDOW|WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow (hWnd, iCmdShow); UpdateWindow (hWnd); while (GetMessage(&msg, NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { char string[255]; switch (msg) { case WM_CLOSE: DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); return 0; case WM_COMMAND: switch(LOWORD(wParam)) { case IDM_FILE_OPEN: LoadString(GetModuleHandle(NULL), IDS_STRING_OPEN, string, sizeof(string)); MessageBox(hWnd, string, "Öffnen der Datei", MB_ICONINFORMATION); break; case IDM_FILE_SAVE: LoadString(GetModuleHandle(NULL), IDS_STRING_SAVE, string, sizeof(string)); MessageBox(hWnd, string, "Speichern der Datei", MB_ICONINFORMATION); break; case IDM_HELP_\1: LoadString(GetModuleHandle(NULL), IDS_STRING_ABOUT, string, sizeof(string)); MessageBox(hWnd, string, "geschrieben am 21.01.2006", MB_ICONINFORMATION); break; case IDM_FILE_EXIT: DestroyWindow(hWnd); break; } break; } return DefWindowProc(hWnd, msg, wParam, lParam); }
-
Elektronix schrieb:
Nein, im TargetExpert und in der Projektdatei ist "GUI" eingestellt. Außerdem würde der Compiler einen "unresolved external "main" ect..."-Fehler von sich geben.
sicher? mit mingw konnte ich alles problemlos kompilieren+starten, obwohl konsole eingestellt war
-
Gut zu wissen, dann liegt der Fehler wenigstens nicht bei mir..

Habs auch noch ohne Projekt-Datei versucht, also alles zu Fuß compiliert. Funzt auch nicht.
-
Hurra, hab es selbst heruasgefunden!
