Cursor verstecken
-
Ich habe gelesen, dass man den Cursor mit SetCusor(NULL) verstecken kann: http://msdn2.microsoft.com/en-us/library/ms648393(VS.85).aspx
Mein Problem ist jedoch, dass jedes mal, wenn ich die Maus bewege er wieder auftaucht. Dazu steht in dem Artikel:
"If your application must set the cursor while it is in a window, make sure the class cursor for the specified window's class is set to NULL. If the class cursor is not NULL, the system restores the class cursor each time the mouse is moved."
Ich verstehe nicht wie die das meinen oder eher wie ich das machen soll. Mein MFC Grundgerüst wurde vom Editor erstellt.
Ich brauche das für folgendes:
Ich rendere mit D3D in das Fenster rein. Und wenn ich jetzt die rechte Maustaste gedrückt halte kann man die Kamera mit der Maus rotieren. Nur möchte ich während die rechte Maustaste gedrückt ist den Mauszeiger verstecken.
-
Dann überschreibe WM_SETCURSOR! Dort ist der einzig richtige Punkt SetCursor zu benutzen.
-
Hat leider nichts gebracht. Das ist meine Nachrichtenschleife:
// Die Nachrichtenschlange ZeroMemory(&message, sizeof(MSG)); // Nachricht Initialisieren while (message.message != WM_QUIT) { // Nachrichten Verarbeiten while (PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) { if ((message.message == WM_SETCURSOR) && m_fRButtonDown) { SetCursor(false); } TranslateMessage(&message); DispatchMessage(&message); } // wieviel Zeit hat der letzte Durchgang gebraucht? dwNow = timeGetTime(); rDiff = (float)(dwNow - dwStart); dwStart = dwNow; if (m_fOgreRunning) { // bewegen und rendern m_pGame->Draw(rDiff); OgreManager::Get()->Render(); } }
-
Das geht so nicht!
WM_SETCURSOR wird nicht in der Nachrichtenschleife versendet.
Du musst das in die Fensterprozeur einbauen, oder das Fenster subclassen!
-
Wie genau mache ich das bei der MFC. Gibts da irgendwo ein Beispiel für?