MessageBox -> keine Anzeige oä
-
Set neustem habe ich das Problem das mir keine MessageBoxen mehr angezeigt werden. Im Debugger überprüft und sonstiges... nichts, die wird einfach übergangen!
Ich kann also zb hinter WinMain gleich eine einfügen aber angezeigt wird sie nicht.
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR cmdLine, int cmdShow) { MessageBox(NULL, "Test", "Debug", NULL); //<- wird nicht angezeigtGetLastError() bringt auch nur 0
Das problem tritt aber scheinbar nur auf wenn ich DLL's im Projekt verwende...
-
Ich glaube dein problem ist das du der MessageBox nicht bescheid gibst welche buttons es anzeigen soll
schau mal in die MSDN was MessageBox als vierten parameter benoetigt
ohne buttons keine messagebox
eines von diesen ist mindest voraussetzung
- MB_ABORTRETRYIGNORE
- MB_CANCELTRYCONTINUE
- MB_OK
- MB_OKCANCEL
- MB_RETRYCANCEL
- MB_YESNO
- MB_YESNOCANCEL
-
InitCommonControls() hat das problem gelöst. Ist zwar komisch aber naja...
-
VirtualDreams schrieb:
InitCommonControls() hat das problem gelöst. Ist zwar komisch aber naja...
Das ist aber ein riiiiieeesen Umweg...
. Von hinten durch die Brust ins Auge...
-
Ist das jetzt Ironie oder einfach nur ernst gemeint ^^

-
VirtualDreams schrieb:
InitCommonControls() hat das problem gelöst. Ist zwar komisch aber naja...
InitCommonControls hat nichts mit MessageBox zu tun...
Kontrlliere die Argumente Deiner Funktion, wie es schon geschrieben wurde!
-
So blöd es auch klingt, es war egal ob ich dort NULL oder MB_OK, MB_TOPMOST usw eingetragen hatte, es wurde nichts angezeigt.
Und es wurden sonst auch MsgBoxen angezeigt die hinten NULL stehen hatten...
-
An dem letzten Parameter sollte es auch eigentlich nicht liegen, da der Wert für MB_OK = 0L entspricht. Nur würde ich schon wegen der Lesbarkeit wenn auch 0 einsetzten und nicht NULL, da es sich um einen UINT Wert handelt und nicht um einen Pointer.
-
Die NULL in MessageBox () ist wirklich nicht das Problem :
winuser.h schrieb:
#define MB_OK 0x00000000L
Es könnte aber sein, dass sich (wie auch immer) ein "WM_QUIT" in die MessageLoop der Anwendung geschlichen hat.
Dann wird eine MessageBox auch nicht (mehr) angezeigt :int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR cmdLine, int cmdShow) { PostQuitMessage (0); // <- wer auch immer ein WM_QUIT gesendet hat // eventuell ein nicht initialisiertes control ? :-) MessageBox(NULL, "Test", "Debug", NULL); // <- wird dann nicht angezeigt DWORD err = GetLastError (); // <- liefert 0 ! }
-
VirtualDreams schrieb:
InitCommonControls() hat das problem gelöst. Ist zwar komisch aber naja...
Nein ist nicht komisch. Deine Anwendung wurde aufgrund eines Fehlers (eben der fehlenden Initialisierung der CommonControls) sofort beendet. Deswegen hast Du Deine MessageBox auch nie zu Gesicht bekommen. Natürlich hat InitCommonControls nichts mit einer MessageBox zu tun, aber eben mit der Funktionsfähigkeit des Programms. Übrigens, das geht perfekt:
#include <windows.h> int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, char* pszCmdLine, int iCmdShow) { MessageBox(NULL, NULL, NULL, 0); return (0); }
-
Warum auch nicht ... normal sollte die Standardüberschrift "Fehler" in der entsprechenden Sprache sein. Standardbutton ist MB_OK ... Standardicon ist MB_ICONERROR wobei ich mir bei letzterem nicht sicher bin ...
-
Eben
! Wobei, wenn man als letzten Parameter nur 0 angibt, kommt (aus Erinnerung) gar kein Icon
.