Dialog mit 'Dev-C++ 4.0'?
-
Hi!
Habe den Dev-C++ 4.0 von Bloodshed. (steh nicht so auf demos von MS)
Hab mich im Internet mal nach Bsp. für Dialoge gekümmert und bin auf das gestoßen:/*----------------------------------------------------------------------- Muster Dialog.cpp www.winapi.net -----------------------------------------------------------------------*/ #include <windows.h> BOOL CALLBACK DialogProc (HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { return DialogBox (hInstance, MAKEINTRESOURCE("IDD_DIALOG1"), NULL, DialogProc); } BOOL CALLBACK DialogProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_INITDIALOG: return (TRUE); case WM_DESTROY: case WM_CLOSE: EndDialog(hDlg,0); return (TRUE); case WM_COMMAND: switch (LOWORD(wParam)) { case 200: EndDialog(hDlg,0); return (TRUE); case 201: Beep (1000,1000); return (TRUE); default: break; } return (FALSE); } return (FALSE); }
Der code lässt sich fehlerfrei compilieren, aber wenn ich es starte passiert nichts! Es erscheint noch nicht mal was im Task-Manager.
Weiß einer warum?wer
-
Du hast doch bestimmt garkeinen Dialog mit dem Resourceneditor erstellt. Bei DevC++ ist auch glaub ich kein grafischer Editor bei. Musst du dann alles per Hand schreiben.
-
sicher doch!
500 ICON MOVEABLE PURE LOADONCALL DISCARDABLE "C:/Programme/Dev-C++/Icon/MAINICON.ICO" #include <winresrc.h> #include "resource.h" IDD_DIALOG1 DIALOG 0, 0, 185, 92 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Modaler Dialog" FONT 8, "MS Sans Serif" { PUSHBUTTON "CANCEL", 200, 40,10,119,8 PUSHBUTTON "OK", 201, 40,25,119,8 }
-
Mach doch in WinMain nicht gleich ein return, sondern rufe DialogBox erstmal so auf und danach GetLastError
-
und nimm mal die " vor und nach IDD_DIALOG1 weg
-
-
Es sollte ausreichen:
DialogBox (hInstance, "IDD_DIALOG1", NULL, DialogProc);
denn:
*The MAKEINTRESOURCE macro converts an integer value to a resource type compatible with the resource-management functions. This macro is used in place of a string containing the name of the resource.
LPTSTR MAKEINTRESOURCE(
WORD wInteger
);
Parameters
wInteger
Specifies the integer value to be converted.*Gruss d_A
-
Ich meinte sowas in der Art:
DialogBox(...); TCHAR ErrorMessage[256]; wsprintf(ErrorMessage, TEXT("GetLastError(): %d"), GetLastError()); MessageBox(NULL, ErrorMessage, "GetLastError - Fehlercode", MB_OK);
Es geht halt darum, dass du das Programm nicht sofot beendest, sondern mal schaust, ob es einen Fehler gab
-
Wenn du bei DialogBox einen String angeben willst, dann musst auch in deiner Resource der Dialog Bezeichner ein String sein.
wenn Dialog ID = 100 dann MAKEINTRESOURCE(100)
wenn Dialog = "MeinDialog" dann "MeinDialog"Wenn er IDD_DIALOG1 nicht kennt, dann würde ich mal die Header einbinden in der das steht!
-> resource.h/E:
Übrigens: MAKEINTRESOURCE ist nichts anderes als ein cast auf LPSTR.
-
Also das mit der ID habe ich hinbekommen!
Jetzt zeigt er auch ein Fenster an!
Aber wenn ich auf Cancel, bzw. das Kreutz rechts oben klicke, sagt er:
GetLastError(): 87oder auch
GetLastError(): 0
?
Aber schonmal danke!
-
Wann kommt denn was? 0 ist das normale, wenn alles gut gegangen ist (kein Fehler) und 87 steht für ERROR_INVALID_PARAMETER
-
Erst kam immer 87 bei beiden (Cancel und Kreutz)
Dann bin ich den Code durchgegangen und habe bei WM_DESTROY nochmal ein
return (TRUE) hintergesetzt. Denke mal das ist richtig!?Dann kam immer 0.
-
Typically, the dialog box procedure should return TRUE if it processed the message, and FALSE if it did not. If the dialog box procedure returns FALSE, the dialog manager performs the default dialog operation in response to the message.
Also ist return TRUE nicht unbedingt das Beste :p (da du ja die Message nicht bearbeitest). Wenn du an Messages gar nicht interessiert bist kannst du auch gleich den ganzen zugehörigen case block weglassen