Happyman0815 Geschrieben 21. Juni 2009 Teilen Geschrieben 21. Juni 2009 Hallo Leute! Hat jemand eine Idee wie man in einer C++ Konsolenanwendung (kein MFC, etc.) Mausbewegungen abfangen kann? Ich möchte einen Punkt in einem drei dimensionalen Raum bewegen. => Mein 3 dimensionales Koordinatensystem hat die Achsen X, Y und Z. Nun habe ich mir gedacht das die Mausbewegungen nach rechts und links die x Koordinaten ändern und die bewegungen nach oben und unten die Y Koordinate. Das Scrollrad soll die Z Koordinaten übenehmen. Leider habe keinen Ansatz wie ich das realisiern könnte. Pseudocode: if( maus wird nach oben bewegt ) { Y++; } if( maus wird nach unten bewegt) { Y--; } if( maus wird nach rechts bewegt ) { X++; } if( maus wird nach ulinks bewegt ) { X--; } if( scrollrad wird nach oben bewegt ) { Z++; } if( scrollrad wird nach unten bewegt) { Z--; } Gruß Happyman0815 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Happyman0815 Geschrieben 21. Juni 2009 Autor Teilen Geschrieben 21. Juni 2009 Ansatz: #include <cstdlib> #include <iostream> HWND GetConsoleHwnd(void); using namespace std; int main(int argc, char *argv[]) { MSG messages; HWND hwnd = GetConsoleHwnd(); while (GetMessage (&messages, NULL, 0, 0)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); } system("PAUSE"); return EXIT_SUCCESS; } LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) /* handle the messages */ { case WM_DESTROY: PostQuitMessage (0); /* send a WM_QUIT to the message queue */ break; case WM_LBUTTONDOWN: std::cout << "Linksklick"; break; case WM_MOUSEWHEEL: //MessageBox(hwnd,"Aktuelle Zeichenfarbe ist Weiss","lol",MB_OK); std::cout << "Scrollrad"; return 0; break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0; } HWND GetConsoleHwnd(void) { #define MY_BUFSIZE 1024 // Buffer size for console window titles. HWND hwndFound; // This is what is returned to the caller. char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated // WindowTitle. char pszOldWindowTitle[MY_BUFSIZE]; // Contains original // WindowTitle. // Fetch current window title. GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE); // Format a "unique" NewWindowTitle. wsprintf(pszNewWindowTitle,"%d/%d", GetTickCount(), GetCurrentProcessId()); // Change current window title. SetConsoleTitle(pszNewWindowTitle); // Ensure window title has been updated. Sleep(40); // Look for NewWindowTitle. hwndFound=FindWindow(NULL, pszNewWindowTitle); // Restore original window title. SetConsoleTitle(pszOldWindowTitle); return(hwndFound); } Leider werden die Messages nicht abgefangen :/ Es wird nur eine Message empfangen wenn ich die Fenster wechsel und dann wieder die Console in den Vordergrund hole. Gruß Happyman0815 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
caytchen Geschrieben 30. Juni 2009 Teilen Geschrieben 30. Juni 2009 Deine WindowProcedure ist in Ordnung, aber GetConsoleHwnd scheint mir nicht unbedingt koscher. Probier es mal mit einem 'echten' Window (CreateWindow). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.