Dialog will nicht (genauer: Combobox)
-
Irgendwie komm ich auch nicht so ganz mit deinen geschweiften Klammern in der Nachrichtenschleife klar....
So sieht eine Nachrichtenschleife eines Dialoges normalerweise aus:
BOOL CALLBACK DialogProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_INITDIALOG: return TRUE; case WM_CLOSE: EndDialog(hDlg,0); return TRUE; case WM_COMMAND: switch(LOWORD(wParam)) { case IDCANCEL: EndDialog(hDlg,0); return TRUE; case IDOK: return TRUE; default: break; } return FALSE; } return FALSE; }
Und so sieht sie auch in dem Tutorial aus... falsch abgetippt?
Die Tatsache, das er gleich zum return springt bedeutet ja das er auch die WM_INITDIALOG überhaupt nicht verarbeitet.....
Auch steigt man aus der switch(message) nicht mit break; aus.... sondern mit return TRUE oder return FALSE...
[ Dieser Beitrag wurde am 23.06.2003 um 18:14 Uhr von Hepi editiert. ]
-
Dass man true oder false zurückgibt hab ich übersehn, es ändert aber auch nichts...
Ich mach s nccht genau nach dem TUtorial sondern eigentlich in erweiterter FormIm großen un ganzen sieht die Nachrichtenschleife doch genauso aus...
-
Bist Du sicher?
Dein Code:
switch(message) { case WM_INITDIALOG: { UINT iCur_Adapter; for(iCur_Adapter = 0 ; iCur_Adapter < g_pD3D->GetAdapterCount() ; iCur_Adapter++) { //ADAPTER if(FAILED(g_pD3D->GetAdapterIdentifier(iCur_Adapter,0,&(info[iCur_Adapter].adapter)))) { MessageBox(0,"GetAdapterIdentifier schlug fehl!","Fehler",0); g_pD3D->Release(); return 1; } SendDlgItemMessage(hWindowDlg,IDC_SETGC,CB_ADDSTRING,0, (LPARAM) "abcdefghijklmnopqrstuvwxyz"); //info[iCur_Adapter].adapter.Description); } }break;
Der Code im Tutorial:
switch(msg) { case WM_INITDIALOG: UINT cur_adapter; for(cur_adapter=0;cur_adapter<lpD3D->GetAdapterCount();cur_adapter++) { if(FAILED(lpD3D->GetAdapterIdentifier(cur_adapter,0,&(info[cur_adapter].adapter)))) { MessageBox(0,"Kann Adapter-Identifier nicht erfragen",0,0); return 0; } //Adapter der AdapterListe im Dialog hinzufügen SendDlgItemMessage(hwndDlg,IDC_SETGC,CB_ADDSTRING,0,(LPARAM)info[cur_adapter].adapter.Description); } } return TRUE;
Also ich sehe da gravierende Unterschiede!
-
wo?
das break; sollte da ja eh nichts machen... der Code im case:-Teil wird ja trotzdem abgearbeitet...
Ich hab jetzt über all true oder false zuzückgegeben, aber das ändert nichts....Im Grunde genommen ist es einfach ein Dialog mit einer Combobox in die ich was reinschreiben will
-
der Code im case:-Teil wird ja trotzdem abgearbeitet...
...und warum haust Du da keinen Breakpoint hin, wenn Du doch sicher bist, das der case-Zweig abgeackert wird???
Wenn es wirklich abgearbeitet wird, dann hält der Debugger da auch bei nem Breakpoint an!!!
Ein Unterschied in Eurem Code: Eine vollkommen überflüssige { und } bei WM_INITDIALOG...
-
zumindest theoretisch sollte er trotz break abgearbeitet werden...
gut, die Klammern sind nicht notwendig, aber die sollten ja wirklich nichts machenALSO:
Ich hab jetzt mal den Debugger (richtig) laufen lasen!
Er kommt bis zu "switch(message)"
Zu diesem Zeitpunkt ist die message lt. Debugger "48" (ich nehrm mal an dass das WM_INITDIALOG ist)Der Wert von hWindowDlg ist:
unused CXX0030: Fehler: Ausdruck kann nicht ausgewertet werdenist das normal? zu diesem Zeitpunkt ist der Dialog ja noch nicht initialisiert...
[ Dieser Beitrag wurde am 23.06.2003 um 20:17 Uhr von PhilipS editiert. ]
-
lol... hab jetzt den Code von dem TUtorial downgeloadet...
Der funktioniert, aber im Debugger hält er auch nciht in der switch Anweisung... Das scheint einfach nicht zu funktionieren...
-
OMG... MIST...
Ich hab nochaml ewig daran rumgemacht und fast den ganzen Code vom TUtorial reinkopiert und jetzt hab ich gemerkt, dass er die GANZE ZEIT schon die richtigen Werte in das Feld eingetragen hat, aber die ComboBox öffnet sich nicht richtig...
Die Werte sind da drin und mit dem Mausrad kann ich sie Auswählen, aber ich kann sie davor nich sehen, weil die Box nicht runterklapptWo kann man das einstellen, dass sie richtig herunterklappt?
Was könnte daran noch falsch sein?[ Dieser Beitrag wurde am 23.06.2003 um 20:47 Uhr von PhilipS editiert. ]
-
Du musst im Resourcen-Editor auf den Pfeil der Combobox clicken und dann nach unten Vergrößern. Dann wird die Combobox nicht größer dargestellt, sondern das aufklappbare Fenster wird größer.
-
ähm... geht nicht....
Ich kann die ComboBox nur nach links/rechts ziehen...
-
Du mußt wirklich erst im Resourcen-Editor auf den Pfeil nach unten an der rechten Seite klicken, dadurch ändern sich die "Anfasser"-Quadrate... dann nach unten ziehen...
Das sollte klappen....
Wichrtig ist auch, das Deine ComboBox den Stil "Dropdown-Listenfeld" (bzw. CBS_DROPDOWNLIST) hat!
[ Dieser Beitrag wurde am 23.06.2003 um 21:22 Uhr von Hepi editiert. ]
-
Irgendwie mach ich da was falsch...
Ich drücke im Menü auf Ressource, dann auf Dialog, dann auf Neu und shon ist en Dialog da..
Dann ziehe ich eine ComboBox hinein und diese kann man standartmäßig nur horizontal ändern...
Wenn ich auf eine Ecke oder den unteren/oberen Punkt zeige, kommt nur das Symbol dafür, dass man die ganze Box verschiebt...
Aber es kommt kein Symbol für vertikale Veränderungedit:
Beim (funktionierenden) Tutorial-Code kann man die ComboBoxen auch nicht vertikal verändern... aber sie gehn trotzdem...[ Dieser Beitrag wurde am 23.06.2003 um 21:46 Uhr von PhilipS editiert. ]
-
Yeah, jetzt gehts!
Ich hab zwar keine Ahnung, was an den ComboBoxen aus dem Tutorial anders ist, aber nachdem ich eine des Tutorial Dialogs per C&P in meins eingefügt hab ging sie... und sie ist im Ressourcen-Editor nich größer als meine...Juhu, den ganzen Nachmittag mit ner ComboBox rumgeärgert
-
Du solltest ja (so wie ich das im Kopf und verstanden hab) nicht den Anfasser anklicken, sondern auf den Dropdowpfeil und da dann über die Anfasser die Größe festlegen - die eigentliche Box wird dadurch nicht größer
-
Ich bin kein DirectX-Experte, mit dem Problem selbst hat es auch nichts zu tun. Aber das hier kann unmöglich richtig sein:
if(FAILED(g_pD3D = Direct3DCreate9(D3D_SDK_VERSION))) { MessageBox(0,"Direct3D9Create schlug fehl!","Fehler",0); return 1; }
Was kommt denn nun von der Funktion zurück? Ein Pointer oder ein HRESULT? Beides gleichzeitig doch wohl nicht. Oder versteh ich schon wieder was nicht?
-
Logischerweise sollte es so lauten:
if( (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION))==NULL) { MessageBox(0,"Direct3D9Create schlug fehl!","Fehler",0); return 1; }
-
Ich denke, dass das FAILED schon prüft, ob es jetzt geklappt hat oder nicht... der Vergleich mit 0 ist da eher überflüssig...
im funktionierenden Tutorial sieht das so aus:
if(FAILED(lpD3D=Direct3DCreate9(D3D_SDK_VERSION))) { MessageBox(0,"DirectX9 kann nicht initialisiert werden",0,0); return -1; }
Das mit dem Dropdown-pfeil hab ich wohl irgndwie nicht so ganz gecheckt...
Ich hatte halt noch nie was mit WINAPI gemacht...
Naja... jetzt weiß ich s...THNX @ ALL
[ Dieser Beitrag wurde am 24.06.2003 um 14:07 Uhr von PhilipS editiert. ]
-
Das Tutorial ist falsch. Direct3DCreate9 gibt einen ZEIGER zurück. Mit dem FAILED Makro überprüft man aber HRESULTs und keine ZEIGER!
-
Zitat aus der MSDN:
**
FAILED
Provides a generic test for failure on any status value. Negative numbers indicate failure.#define FAILED(Status) ((HRESULT)(Status)<0)
Requirements
Windows NT/2000/XP: Requires Windows NT 3.1 or later.
Windows 95/98: Requires Windows 95 or later.
Header: Declared in winerror.h.See Also
Error Handling
**
-
naja, dann werd ich s mal ändern....
thnx