File Drag&Drop
-
Hi Leute,
Ich hab keine Ahnung, in welches Forum das hier soll, darum schreibe ich es einfach mal hier reinFalls das falsch ist, bitte einfach verschieben
Ich schreibe gerade mit OpenGL & freeGLUT ein kleines Programm, welches ein "Projektdatei" als Input benötigt. Nun überlege ich, wie man diese möglichst komfortabel übergeben kann, ohne das ich erst einen Open File Dialog rendern muss(ich arbeite nur über freeGLUT mit der WinAPI, da ich ihre Syntax nicht sonderlich mag). Dabei bin ich auf File Drag&Drop "gestoßen". Ich stelle mir das so vor, dass ich einfach aus dem Windows Explorer die Projektdatei auf mein Programmfenster ziehe und ich dann mit dem Pfad weiterarbeiten kann. Irgendwelche Ideen?
Danke schon mal
MfG
DragonRaider
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89, C99 und C11) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Siehe DragAcceptFiles und WM_DROPFILES
-
Hi Martin,
Wie soll ich das denn, ohne die WinAPI direkt anzusprechen, machen?
MfG
DragonRaiderEdit: Sorry, dass ich so barsch war
-
Entweder überwinde dich und benutze die WinAPI oder finde eine Bibliothek, die die WinAPI benutzt.
-
Hi,
Ich hab's jetzt so weit geschafft. Mein Code sieht wie folgt aus:char *path = "project.amp"; unsigned int pathLength = 0; HWND hWND = WindowFromDC(wglGetCurrentDC()); DragAcceptFiles(hWND, true); MSG msg; while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); if(msg.hwnd == hWND) { if(msg.message == WM_DROPFILES) { HDROP hDROP = (HDROP)msg.wParam; DragQueryFile(hDROP, 0, path, pathLength); DragFinish(hDROP); break; } } } wprintf(L"File: \"%S\", Lenght: %u\n", path, pathLength); system("pause");
Nur leider lautet die Ausgabe
File: "project.amp", Lenght: 0 Drücken Sie eine beliebige Taste . . .
Habt ihr vielleicht ne Idee, woran das liegen köntte? Danke schon mal für den Denkanstoß
Ich dachte, es gibt vielleicht auch noch ne andere Methode, aber...
So sollte es ja eigentlich auch gehen...
MfG
DragonRaider
-
Warum sollte
DragQueryFile
irgendetwas nachpath
schreiben, wenn du sagst, dass da kein Platz ist (pathLength = 0).Zudem sollte man auch nicht Stringliterale verändern.
Nimm ein Array dafür.
-
Oh, stimmt... Ich hatte die msdn Seite dazu nicht aufmerksam genug gelesen ^^ Danke
Ich dachte, in diesem uint würde die Länge des Outputs gespeichert werden
Dummheit meinerseits
Danke noch mal an Alle.
MfG
DragonRaiderPS.:
An Alle, die es interessiert:char path[260]; unsigned int pathLength = 260; HWND hWND = WindowFromDC(wglGetCurrentDC()); DragAcceptFiles(hWND, true); MSG msg; while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); if(msg.hwnd == hWND) { if(msg.message == WM_DROPFILES) { HDROP hDROP = (HDROP)msg.wParam; DragQueryFile(hDROP, 0, path, pathLength); DragFinish(hDROP); break; } } } wprintf(L"File: \"%S\", Lenght: %u\n", path, pathLength); system("pause");
-
DragonRaider schrieb:
Ich dachte, in diesem uint würde die Länge des Outputs gespeichert werden
Dummheit meinerseits
Dann wäre da doch ein Zeiger im Spiel.
-
DragonRaider schrieb:
Dummheit meinerseits
...