Nutzen der WinAPI innerhalb eines VC++(Windows Forms) Programmes
-
Hi,
ich arbeite momentan daran, OpenGL in WinForm Umgebung unter Visual Studio 2013 Express zu nutzen. Klappt auch soweit. Nun wollte ich jedoch Maus und Tastatureingaben innerhalb meines OpenGL "Bereiches"(mir fällt gerade nicht der richtige Begriff ein) auswerten. Dazu habe ich mir dann den Handle in HWND Form "beschafft". Nun habe ich in das Load-Event meines Forms folgenden Code eingefügt:MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { //ProcMsg(&msg, OpenGLView->hWND, &ReRender); Button1->BackgroundColor = Color::Red; }
Ob meine ProcMsg Funktion funktioniert lasse ich jetzt mal außen vor, das Ding ist einfach: Egal was ich mache, die Hintergrundfarbe des Buttons wir dummerweise nie rot -> Keine Message erhalten. Woran könnte das liegen?
Vieeelen Dank schon mal im Voraus
MfG
DragonRaider
-
Weil du C++/CLI mit .Net benutzt das schon mal gar nix mit MFC zu tun hat und man das auch nicht nutzen soll. Warum man das nicht nutzen sollte wurde hier im Forum schon reichlich erläutert.
Des weitern kannst du nicht einfach mal mit GetMessage dir die Nachricht abgreifen und dann Windows-Funktionen nutzen. Da fast alles was Windows macht also was mit der GUI zusammen hängt Nachrichtenbasiert ist musst du logischerweise auch das Windows-Messaging mit unterstützen, sonst wird da auch nix gemacht weil die Nachrichten ja gar nicht weiter verarbeitet werden, aber lange rede kurzer Sinn beschäftige dich mit der ganzen Sache oder such dir einen anderen weg um dein Programm um zu setzen.
Über DirectX kann man auch nachrichten empfangen zum Beispiel
-
Hi,
leider habe ich das ganze Rendering schon mit OpenGL umgesetzt. Dass ich die Nachrichten dann weitergeben muss ist mir schon klar, sofern ich dich da richtig verstanden hab, das wird in meiner ProcMsg() gemacht(wenn es meinen View nicht betrifft und/oder ich es nicht bearbeite).
Im Endeffekt würde ich mich dann also gerne mit allem befassen. Und falls ich dich irgendwie falsch verstanden habe im Bezug auf das Weiterleiten, hier meine ProcMsg:void ProcMsg(MSG *msg, HWND TargetHWND, bool *ReRender) { if (msg->hwnd = TargetHWND) { *ReRender = true; if (msg->message == WM_MOUSEMOVE) { //glOrtho verschieben } else if (msg->message == WM_MOUSEHWHEEL) { //Zoomen } else { TranslateMessage(msg); DispatchMessage(msg); *ReRender = false; } } else { TranslateMessage(msg); DispatchMessage(msg); *ReRender = false; } }
Danke schon mal
MfG
DragonRaider