mouse over events



  • Hallo zusammen,
    ich habe folgendes Problem. Undzwar habe ich einen Button, nennen wir das handle dazu hButton, und möchte, dass wenn ich mit der Maus in diesen Button fahre, bzw herausfahre folgende MessageBoxen angezeigt werden.

    MessageBox(0,"Enter","",0); // beim Eintreten in den Button
    MessageBox(0,"Leave","",0); // beim Austreten ...
    

    Habe schon etwas im Netz darüber gefunden, aber ich kann mit den ganzen CodeSnippets nichts anfangen, weil ich die nicht verstehe.

    Ich weiß, dass man was mit WM_MOUSEMOVE, WM_MOUSELEAVE machen muss und ersmal TRACKMOUSEEVENT deklarieren muss. Also mit der Struktur TRACKMOUSEEVENT komm ich eigentlich gut klar, aber diese ganzen Messages und wo was hingehört erschließt sich mir bei den ganzen Beispielen im Netz nicht.

    Habe bis jetzt in der WINMAIN

    tme.cbSize = sizeof(tme);
    	tme.dwFlags = TME_HOVER;
    	tme.dwHoverTime = HOVER_DEFAULT;
    	tme.hwndTrack = hButton;
    
            TrackMouseEvent(&tme);
    

    dann in WM_MOUSEHOVER

    MessageBox(...);
    

    das wird aber nicht ausgeführt.


  • Mod

    Und was willst Du jetzt bitte wissen?
    Es gibt doch funktionierende Beispiele im Netz. Was ist nicht klar?

    Wenn es Dir um einen normalen Button geht, solltest Du Dich zuerst mal mit Subclassing befassen.



  • ... aber diese ganzen Messages und wo was hingehört erschließt sich mir bei den ganzen Beispielen im Netz nicht.

    ... das wird aber nicht ausgeführt.

    Da steht doch mein Problem.

    Ich werd mir mal dieses Subclassing angucken.

    Danke für den Beitrag.


  • Mod

    Du hast anscheinend nicht verstanden "an welches Fenster" Nachrichten gesendet werden... Wo erwartest Du denn die Nachricht. Das sieht man in Deinem Code natürlich nicht.



  • Mh ich versuch das mal zu skizzieren

    // skizze 
    
    HWND hMain, hButton;
    TRACKMOUSEEVENT tme;
    
    WinMain( ... ) {
    
       // Initalisierungen etc
    
        tme.cbSize = sizeof(tme);
        tme.dwFlags = TME_HOVER;
        tme.dwHoverTime = HOVER_DEFAULT;
        tme.hwndTrack = hButton;
    
        TrackMouseEvent(&tme); // muss wahrscheinlich woanders hin?
    
        hMain = CreateWindow( ... );  // <- hat MainProc
    
    }
    
    LRESULT CALLBACK MainProc( HWND hMain, ... ){
    
       switch( msg ){
    
          case WM_CREATE:
              hButton = CreateWindow( "button", ... );
              break;
    
          case WM_DESTROY:
              PostQuitMessage(0);
              break;
    
          case WM_COMMAND:
           ...
    
               case WM_MOUSEHOVER:
                  // soll gesendet werden, wenn man Mauszeiger über hButton fährt?
                  // wird bei mir aber nicht ausgeführt
       }
    
       return Default...
    
    }
    

    In dem TRACKMOUSEEVENT habe ich doch gesagt, dass es sich auf hButton beziehen soll und eingestellt, dass es bei HOVER die nachricht WM_MOUSEOVER sendet.


  • Mod

    Eben! Und an wen wird es gesendet?
    An die Fensterprozedur von hButton...
    Also musst Du einen Subclass machen.


Log in to reply