Dialog schließen
-
Hi,
Diese Zeile müsstest du noch ändern hwnd = CreateDialog (hInstance, szAppName, 0, NULL) ;
Denn statt NULL musst du die Prozedur dieser Dialogbox übergeben, wie z.B.
... hwnd = CreateDialog (hInstance, szAppName, 0, DlgProc );... BOOL CALLBACK DlgProc (HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) // Dialogprozedur { ...... }
Schau mal genauer beim Petzold nach, da wird beschrieben wie es geht
MfG Unwissender
-
case IDCANCEL: // Achtung PostQuitMessage(0); return 0;
-
Das war gerade für das Kreuz oben rechts
-
komisch...Petzold hat die Klasse aber auch Registriert...naja, da muss ich wohl noch lesen...
jetzt bekomme ich diese Fehlermeldung :
Error LCDCON.CPP 16: Cannot convert 'int (__stdcall *)(void *,unsigned int,unsigned int,long)' to 'int (__stdcall *)()' in function __stdcall WinMain(void *,void *,char *,int)
betreffende Zeile :
hwnd = CreateDialog (hInstance, szAppName, NULL, DlgProc);
und DlgProc :
BOOL CALLBACK DlgProc (HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case IDCANCEL: PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hdlg, message, wParam, lParam) ; }
sorry, ich kapier das nicht...in der Hilfe steht, die API
thx
-
erwartet als letzten Parameter die Adresse der DialogProc, die gebe ich ihm doch oder?
ausversehen auf Enter gedrückt...
-
Wenn der Petzold da schon DLGWINDOWEXTRA angibt dann soll bestimmt auch DefDlgProc aufgerufen werden und nicht DefWindowProc.
-
Original erstellt von <fadfreak>:
erwartet als letzten Parameter die Adresse der DialogProc, die gebe ich ihm doch oder?Nö. Du gibst ihm einen Pointer auf eine Window-Proc.
-
funktioniert immernoch nicht :
#include <windows.h> #include "config.h" BOOL CALLBACK DlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("LCDCon") ; HWND hwnd ; MSG msg ; hwnd = CreateDialog (hInstance, szAppName, 0, DlgProc); ShowWindow (hwnd, iCmdShow) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; } BOOL CALLBACK DlgProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_DESTROY: PostQuitMessage (0) ; return 0 ; } return DefDlgProc (hwnd, message, wParam, lParam) ; }
-
nimm doch den quellcode von der cd. der wird wohl richtig sein und funktionieren?
-
ja...ich glaube das werde ich wohl machen müssen...schade...
Mein Ziel : Eine Dialog-Box öffnen, ohne vor ein Fenster geöffnet zu haben...also kein CreateWindow, ist das überhaupt möglich?Danke
-
Natürlich ist sowas möglich
-
Original erstellt von <fadfreak>:
**ja...ich glaube das werde ich wohl machen müssen...schade...
Mein Ziel : Eine Dialog-Box öffnen, ohne vor ein Fenster geöffnet zu haben...also kein CreateWindow, ist das überhaupt möglich?Danke**
Geh auf http://www.winapi.net unter "Codeschnipsel" findest Du "Eine rein dialog-basierte Anwendung erzeugen"
Das ist genau DAS, was Du suchst!
-
Ja, habe ich gemacht, immernoch der gleiche Fehler :
Compiling LCDCON.CPP:
Error LCDCON.CPP 15: Cannot convert 'int (__stdcall *)(void *,unsigned int,unsigned int,long)' to 'int (__stdcall *)()' in function __stdcall WinMain(void *,void *,char *,int)Ist das mein Compiler?
aber das wars eigentlich, was ich suchte...
-
Lösch deinen kompletten Quelltext und füge das Beispiel von Winapi.net ein!
Du bist der erste, der mit dem dort abgedruckten (kompletten) Quelltext Fehler hat!
-
HALT DIE KLAPPE
-
Nein, nein. Hör nicht auf die anderen! Du musst den letzten Parameter in CreateDialog() nach DLGPROC casten. Also so:
CreateDialog(..., (DLGPROC)DialogProc);
-
Wenn man das richtig macht braucht man den Cast NICHT!
-
@<Ars>: Halt dein Maul, du kleiner IDIOT !!!!!!!! Du hast ja keine Ahnung! Im BCB z.B. MUSS man das casten!
-
DANN IST DER BCB EIN ASOZIALER COMPILER!! ICH WERDE DAS GLEICH TESTEN, OB DU WIRKLICH RECHT HATTEST, NOTFALLS ENTSCHULDIGE ICH MICH EIN BISSCHEN
-
SCHULDIGUNG. DIESER BCB IST EIN AR5CH