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.


  • Mod

    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();
    	}
    }
    

  • Mod

    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?


Anmelden zum Antworten