Modaler Dialog und Nachrichtenschleife
-
Die Proc sieht momentat so aus
bool DlgProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
return false;
}
-
Du hast aber schon den Pointer auf deine DialogProc bei DialogBox angegeben
-
Natürlich !!!
Aber verstehst du denn nicht was ich meine ???
Ich machs noch mal was deutlicher:DialogBox(hInst,MAKEINTRESOURCE(IDD_HARDWARE),hWnd); // kehrt erst zurück, wenn der Dialog zerstört wurde.
MSG msg;
while(GetMessage(&msg,0,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}// dieser Block wird nie ausgeführt, da ja DialogBox nicht zurückkehrt, bis sie zerstört wurde. Wie kann sie jedoch überhaupt zerstört werden, wenn die Nachrichtenschleife nie gestartet wird ???Verstehst du jetzt, was ich meine ???
-
trottel, du verstehst nicht, was er dir sagen will
-
-
So wie das in diesem Beispiel aussieht, braucht ein DialogBox gar keine Nachrichtenschleife ???
Dann verstehe ich aber überhaupt nicht mehr, wieso ich dann meinen Dialog nicht verschieben kann !!!
-
zeig mal deinen DialogBox aufruf
-
Wenn du es wirklich so machst wie du grad gepostet hast ist es kein Wunder, dass es nicht funktioniert!
Du musst bei DialogBox als 4. Parameter schon auch deine DialogProc angeben (wie auch im Tipp von <-King-> zu sehen ist)
-
Ja sorry, das ist ein Schreibfehler, ich könnte ja gar nicht kompilieren, wenn ich der Funktion zu wenig Parameter übergeben würde...
-
zeig uns endlich deinen code. ist ja zum verrücktwerden hier
-
Na schön ich zeige euch den Code, doch ich habe das Gefühl, dass dies auch nicht viel bringen wird:
#include <windows.h> #include "resource.h" bool __stdcall DlgProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){ switch(uMsg){ case WM_INITDIALOG: return true; case WM_DESTROY: EndDialog(hWnd,0); return true; default: return false; } } int __stdcall WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int nShowCmd){ DialogBox(hInst,MAKEINTRESOURCE(IDD_DLG),0,(DLGPROC)&DlgProc); return 0; }
So, der Dialog besteht aus einem Fenster und 2 Buttons. Ausser den 2 Buttons wird aber nichts gezeichnet !!
Ich habe also 2 Buttons mitten auf meinem Desktop, aber keinen Fensterrahmen oder sonst was...Gruss Ishildur
-
DER RÜCKGABEWERT DER DIALOGPROC IST BOOL NICHT bool !!!
-
**&**DlgProc
Da ist ja wohl was zuviel, oder? Der cast ist übrigens nicht nötig, wenn man es richtig macht. Da hätten schon längst die Alarmglocken läuten müssen!
-
@gerber
Du hattest recht, mit BOOL anstatt mit bool hat es geklappt. Was ich nicht so ganz nachvollziehen kann, ist, weshalb du so unglaublich sauer auf mich bist, dass du gleich 3 von diesen roten dingern zeichnen musstest ??Naja wie auch immer, ich bin dir auf jedem Fall sehr dankbar !!
Gruss IshildurP.S.
Ist den BOOL keine 32-Bit Variable ??
-
die smilies mach ich immer und überall. hat nichts mit dir zu tun
BOOL == int
bool == bool
-
@King
Hallo King, weisst du ich mache immer ein & bei Funktionspointer aus Gründen der Lesbarkeit !
Wegen des Cast gebe ich dir Recht, da habe ich mich auch gefragt, wieso dieser Nötig ist, aber er stand nun mal so im Beispiel der MSDN. Also dachte ich das hat wieder etwas mit einer Typenrefenition zu tun...
-
Und was ist TRUE bzw FALSE ??
Ach ja, habs gerade ausprobiert: bool ist eine 8-Bit Variable...