CStatic soll auf WM_MOUSEHOVER & WM_MOUSELEAVE hören



  • Moin,
    ich hab ein CStatic wo ein BMP angezeigt wird, dies soll sich ändern, wenn man mit der Maus drüber fährt. Hab auch schon einiges hier im FAQ darüber gefunden.
    Meiner meinung nach müße meine Klasse auch funktionieren aber mein Computer ist da anderer ansicht 🤡
    Mein Code sieht wie folgt aus:

    .h:

    ////////////////////////////////////////////////////////////\\///////////////////////////////////////////////////////////////
    class CStaticButton : public CStatic   
    { 
    public: 
    	CStaticButton(){}; 
    	virtual ~CStaticButton(){}; 
    	virtual LRESULT WindowProc(UINT message, WPARAM w, LPARAM l);
    	virtual void PreSubclassWindow() ;
    };
    ////////////////////////////////////////////////////////////\\///////////////////////////////////////////////////////////////
    

    .cpp:

    ////////////////////////////////////////////////////////////\\///////////////////////////////////////////////////////////////
    void CStaticButton::PreSubclassWindow()
    {
    	CStatic::PreSubclassWindow();
    	ModifyStyle(0, SS_NOTIFY);
    	TRACKMOUSEEVENT stTME;
    
    	stTME.cbSize      = sizeof(stTME);
    	stTME.dwFlags     = TME_HOVER | TME_LEAVE;
    	stTME.hwndTrack   = GetSafeHwnd();
    	stTME.dwHoverTime = HOVER_DEFAULT;
    
    	BOOL bRet = _TrackMouseEvent(&stTME);
    	if (bRet == 0)
    		TRACE("(CStaticButton) PreSubclassWindow() : _TrackMouseEvent failed [error code = %lu]\n", GetLastError());
    }
    ////////////////////////////////////////////////////////////\\///////////////////////////////////////////////////////////////
    
    ////////////////////////////////////////////////////////////\\///////////////////////////////////////////////////////////////
    LRESULT CStaticButton::WindowProc(UINT message, WPARAM w, LPARAM l)
    {
    	switch(message)
    	{
    	case WM_MOUSEHOVER: MessageBox("HOVER"); break; // wie so wird das nicht ausgelöst
    	case WM_MOUSELEAVE: MessageBox("LEAVE"); break; // dies wird 4x beim start aufreufen und dann nicht mehr
    	}
    
    	return(CStatic::WindowProc(message, w, l));
    }
    ////////////////////////////////////////////////////////////\\///////////////////////////////////////////////////////////////
    

    wie so geht das nicht *wunder* 😕

    Einer eine Idee?


Anmelden zum Antworten