Mausincrementer
-
Ich denke so ungefähr sollte das für das Scrollrad dann aussehen. Könnte mir jemand sagen wie ich das benutze?
Ich bin etwas im Zeitstress damit daher frag ich so banal

void __fastcall TAppEvent::OnMessage(MSG& Msg, bool& Handled) { if (Msg.message == WM_MOUSEWHEEL) { Msg.message = WM_KEYDOWN; Msg.lParam = 0; i = HIWORD(Msg.wParam); if (i > 0) { // Bewegung nach oben } else { // Bewegung nach unten } Handled = false; } }Für die Mausbewegungen X,Y habe ich es jetzt so realisiert:
while(true) { GetCursorPos ( &ptCursor ); if( (ptCursor.x != ptCursor_temp.x) || (ptCursor.y != ptCursor_temp.y)) { if(ptCursor.x > ptCursor_temp.x) m_Xachse+= (ptCursor.x-ptCursor_temp.x); if(ptCursor.x < ptCursor_temp.x) m_Xachse-= (ptCursor_temp.x-ptCursor.x); if(ptCursor.y < ptCursor_temp.y) m_Yachse+= (ptCursor_temp.y-ptCursor.y); if(ptCursor.y > ptCursor_temp.y) m_Yachse-= (ptCursor.y-ptCursor_temp.y);; system("CLS"); std::cout << "X Achse: " << m_Xachse << " Y Achse: " << m_Yachse << ""; SetCursorPos( 400, 400 ); //Funktioniert GetCursorPos ( &ptCursor_temp ); } //Sleep(100); }Auch nicht die feine englische ...
Gruß
WAR][FIRE
-
So nun mal was schon eher passendes:
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ß
WAR][FIRE
-
Ich hab mal schnell einen Code zusammengezimmert schau dir den mal an:
#include <windows.h> #include <stdlib.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MSG msg; HWND hWnd; WNDCLASS wc; const wchar_t szAppName[] = L"Maus"; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = NULL; wc.hInstance = hInstance; wc.lpfnWndProc = WndProc; wc.lpszClassName = szAppName; wc.lpszMenuName = 0; wc.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&wc);//<-- Fensterklasse registrieren hWnd = CreateWindow( //<-- Fenster erstellen szAppName, szAppName, WS_VISIBLE|WS_SYSMENU | WS_BORDER | WS_MINIMIZEBOX |WS_CLIPCHILDREN, CW_USEDEFAULT, CW_USEDEFAULT, 500, 500, NULL, NULL, hInstance, NULL); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int xPos; int yPos; int zDelta; wchar_t test; switch(message) { case WM_MOUSEMOVE://<-- Maus wurde in der Client, Area bewegt { xPos = LOWORD(lParam); //<--xPosition der Maus relativ zur linken oberen Ecke der Client Area yPos = HIWORD(lParam); //<--yPosition der Maus relativ zur linken oberen Ecke der Client Area return 0; } case WM_MOUSEWHEEL: { zDelta = GET_WHEEL_DELTA_WPARAM(wParam);//<-- Wenn positiv wurde das Rad nach vorne gedreht, wenn negativ wurde es nach hinten gedreht.(120-er Schritte) MessageBox(hWnd,_itow(zDelta,&test,10),NULL,MB_YESNO); } } return DefWindowProc(hWnd, message, wParam, lParam); }
-
Ja genau sowas brauch ich!!
Jetzt brauch ich das noch für eine Console und dann passts.
Ich wollte diese "Funktion" dann als Klasse in eine bestehende Consolenanwendung implementieren <:
Gruß
WAR][FIRE
-
WAR][FIRE schrieb:
Ja genau sowas brauch ich!!
Jetzt brauch ich das noch für eine Console und dann passts.
Dann versuch dich mal:) Konsole ist nicht so meins.. da kann ich dir nicht helfen.
-
Ja deins ist ja schon fast des rätsels lösung.

Nur noch auf die Konsole überschreiben. Am besten wäre es wenn die Mausaktionen Fensterunabhängig sind, also über den ganzen Bildschirm die Mausaktionen abgefangen werden.
Gruß
WAR][FIRE
-
Hmm eine Lösung nur für die Console finde ich leider nicht, bzw. ein globales Abfangen der Maus Events.
Weiß jemand wie ich in der Konsole ein seperates Windows Fenster erstellen kann?
(Wie geht das denn bei Win32 Anwendungen? Das müsste sich dann ja analog auf eine Konsolenanwendung übertragen lassen!)Dieses Fenster hätte dann einen seperaten Message Handler indem ich die Mausbewegungen abfangen könnte.
Gruß
WAR][FIRE
-
-
FASTCALL PASCAL WINAPI schrieb:
Ja diesen Befehl brauch ich sobald ich ein Fenster erstellt habe.
Mein Problem ist für die Erstellung eines Fenster in einer Konsolenanwendung ist, das ich keine HINSTANCE übergeben bekommen, wie es bei einer WinMain(..) funktion der fall ist.
Wie bekomme ich also eine HINSTANCE ohne es übergeben zu bekommen?
Gruß
WAR][FIRE
-
Alle Mann festhalten... 3 2 1 *push*
