Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Sec Junior JLI'ler
Anmeldedatum: 18.09.2002 Beiträge: 88
Medaillen: Keine
|
Verfasst am: 19.02.2004, 05:40 Titel: Dialog |
|
|
Hi
Wenn ich das Code so kompilier und ausführe erscheint das Dialogfeld
nicht, kann mir einer helfen?
Code: |
#include <windows.h>
HWND g_DlgHWnd;
BOOL CALLBACK DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
g_DlgHwnd = CreateDialog(hInstance, MAKEINTRESOURCE(101), NULL, DlgProc);
return 0;
}
BOOL CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
//MSG
//...
//...
return DefDlgProc(hwnd, msg, wParam, lParam);
}
|
MFG Sec _________________ MFG Sec |
|
Nach oben |
|
|
me Junior JLI'ler
Anmeldedatum: 10.09.2003 Beiträge: 60
Medaillen: Keine
|
Verfasst am: 19.02.2004, 14:29 Titel: |
|
|
Könnte sein dass du InitCommonControls() nicht aufrufst, oder dein Dialog-Proc liefert als Standard TRUE zurück (was zu hässlichen Darstellungsfehlern führt).
Debug halt mal, und check welche int-value du von CreateDialog() zurückbekommst. Wenn da nicht -1 steht, sollte der Dialog eigentlich korrekt sein.
P.S.
Kannst auch mal probieren als Parent-Window NULL anzugeben. Wennste nämlich keins hast, kannste auch keinen Dialog aufmachen. Und ich hab nicht gesehen, dass irgendwo in deinem Code ein Fenster erstellt wird. _________________ If something is stupid and it works, it ain't stupid! |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 19.02.2004, 14:31 Titel: |
|
|
Ich würde eher denken, dass es daran liegt, dass du keine Hauptnachtichtenschleife hast, das Programm beendet sich außerdem sofort !?
Christian |
|
Nach oben |
|
|
me Junior JLI'ler
Anmeldedatum: 10.09.2003 Beiträge: 60
Medaillen: Keine
|
Verfasst am: 19.02.2004, 14:33 Titel: |
|
|
edit:*war schwachsinn* _________________ If something is stupid and it works, it ain't stupid!
Zuletzt bearbeitet von me am 19.02.2004, 14:34, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 19.02.2004, 14:34 Titel: |
|
|
Ist vielleicht nebensächlich, aber NULL sollte gehen, dann ist der Desktop das Parent, wenn mich nicht alles täuscht.
C. |
|
Nach oben |
|
|
Sec Junior JLI'ler
Anmeldedatum: 18.09.2002 Beiträge: 88
Medaillen: Keine
|
Verfasst am: 19.02.2004, 15:53 Titel: |
|
|
habs auch mit ne Nachrichten Schleife ausm Buch versucht geht auch nicht
das Programm beendet sich gleich ohne das das Dialogfeld angezeigt wird
und wenn ich es mit
Code: |
if(g_DlgHWnd == NULL)
{
MessageBox("Fehler", "Fehler", MB_OK);
}
|
prüfe erscheint auch kein MessageBox
MFG Sec _________________ MFG Sec |
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 19.02.2004, 15:56 Titel: |
|
|
du hast keine hauptschleife in der main funktion...
er erstellt das fenster, beendet das programm aber gleich wieder durch return 0. |
|
Nach oben |
|
|
me Junior JLI'ler
Anmeldedatum: 10.09.2003 Beiträge: 60
Medaillen: Keine
|
Verfasst am: 19.02.2004, 16:45 Titel: |
|
|
Im übrigen wirft CreateDialog() nen Fehler bei -1!!! Bei Null haste sicher keinen Fehler. Die liefert dir keinen Handle, sondern ne integer. _________________ If something is stupid and it works, it ain't stupid! |
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 19.02.2004, 16:55 Titel: |
|
|
falsch!
Return Values
If the function succeeds, the return value is the handle to the dialog box.
If the function fails, the return value is NULL. To get extended error information, callGetLastError. |
|
Nach oben |
|
|
me Junior JLI'ler
Anmeldedatum: 10.09.2003 Beiträge: 60
Medaillen: Keine
|
Verfasst am: 20.02.2004, 16:23 Titel: |
|
|
sorry, stimmt. hab beim überfliegen meines codes ne 1 mit ner -1 verwechselt.
ich meine mich jedoch vage erinnern zu können, dass ich beim failen der Funktion, nie NULL bekommen hab.
naja, vergessts.
p.s.
Im übrigen braucht man nicht zwingend die Message-Schleife, wenn man den Dialog ohne Parent aufmacht. Probier auchmal statt hInstance GetModuleHandle(NULL) aus. _________________ If something is stupid and it works, it ain't stupid! |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 20.02.2004, 16:40 Titel: |
|
|
me hat Folgendes geschrieben: | Im übrigen braucht man nicht zwingend die Message-Schleife, wenn man den Dialog ohne Parent aufmacht. |
Wie soll es sonst gehen? Wie soll die Applikation ohne Nachrichtenschleife merken, dass ein Knopf gedrückt wurde, usw?
C. |
|
Nach oben |
|
|
me Junior JLI'ler
Anmeldedatum: 10.09.2003 Beiträge: 60
Medaillen: Keine
|
Verfasst am: 21.02.2004, 13:19 Titel: |
|
|
Code: |
int WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPSTR lpCmd, int iShow)
{
InitCommonControls();
CreateDialog(GetModuleHandle(NULL),MAKEINTRESOURCE(IDD_DIALOG),NULL,DlgProc);
return 0;
}
|
Wo braucht man da ne Schleife? Funktioniert einwandfrei, auch ohne die Message-Schleife. Der Dialog nimmt da schon alle Commands entgegen. Beend ich den Dialog, is mein Prog aus.
Aber ne Schleife brauch ich da net.
P.s. Natürlich hat der Dialog ne eigene Schleife, aber ich brauch keine Schleife mit PeekMessage, bzw. GetMessage; _________________ If something is stupid and it works, it ain't stupid! |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 21.02.2004, 13:30 Titel: |
|
|
Wieso braucht man da keine Schleife?
CreateDialog macht nix anderes, als den Dialog zu generieren. Ist der Dialog fertig, wird die Funktion wieder verlassen und der Code weiter ausgeführt.
Da die nächste Zeile return 0; enthält, wird das Programm verlassen.
Was sollte es denn sonst am Verlassen hindern? _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
=]Mid[=]Night[= Super JLI'ler
Anmeldedatum: 20.11.2002 Beiträge: 380 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 21.02.2004, 16:12 Titel: |
|
|
Könnte es sein, dass du vorher mit Visual Basic oder sowas geproggt hast me??? Da muss man keine extra nachrichtenschleife machen ... |
|
Nach oben |
|
|
me Junior JLI'ler
Anmeldedatum: 10.09.2003 Beiträge: 60
Medaillen: Keine
|
Verfasst am: 22.02.2004, 19:20 Titel: |
|
|
Ich glaub ihr checkt net was ich mein:
Ich brauch nur CreateDialog aufrufen, dann läuft der Dialog bis ich ihn schliesse und das Prog verlassen wird. So ist das jedenfalls mit der WinAPI in C++.
Da brauch ich keine Windows-Nachrichten Schleife.
100% sicher! _________________ If something is stupid and it works, it ain't stupid! |
|
Nach oben |
|
|
|