mouse-over Effekt vc++ 6

Baron Sengir

Mitglied
Hallo Ihr Lieben,

ich programmiere gerade eine kleinere Dialogfeldanwendung und möchte gerne eigene designte Buttons anstelle der Standardbuttons einsetzen. Bitmap über die Ressourcen einbinden und ein Klick abfragen ist kein wirkliches Problem, funktioniert soweit ganz gut. Jetzt möchte ich aber, ähnlich wie bei Flash oder auf Websites, so etwas wie ein Mouse-over-Effekt programmieren, also wenn die Maus über die Bitmap geschoben wird, soll die Bitmap ausgetauscht werden, die restliche Funktionalität soll aber erhalten bleiben.

Nun bin ich aber erst seit circa 3 Wochen mit dem Programmieren mit VC++ 6 dabei und kenne mich noch nicht gut genug aus. Folglich habe ich auch gar keine Ahnung, wie ich diesen Mouse-Over-Effekt hinbekommen soll. Eine Nachricht, die dieses Ereignis abfängt gibt es ja nicht (zumindet soweit ich weiß).

Könnt Ihr mir helfen, zum Beispiel indem Ihr mich auf den richtigen Weg schubst? Vielleicht kennt jemand ein Tutorial oder kann mir eine Anleitung oder irgendwelche Tipps geben. Wäre super nett. Google und stöbern in unserer Uni-Bibliothek hat mich bislang nicht auf den richtigen Weg gebracht.

Vielen Dank für Eure Bemühungen schon mal vorweg und
liebe Grüße
 
Also es gibt da schon eine Nachricht die das behandelt.
Du must die Nachricht WM_MOUSEMOVE behandeln. Und zwar kannst du das in CWnd::OnMouseMove() machen.
Darin schaust du nach, ob die Position inerhalb des Rechtecks des Buttons ist, dann ist die Mouse über dem Button.

Daniel
 
Hi ...

Ich mache das so, dass ich die Mausbewegung über dem Button abfrage (also die WM_MOUSEMOVE msg des Buttons abfange) und dann ein TRACKMOUSEEVENT benutze um mir eine Msg schicken zu lassen, wenn die Maus den Button wieder verlässt ...
das geht relativ einfach ...

Ein kleines Beispiel:
Code:
BOOL bIsTracking = FALSE;

// Wird bei WM_MOUSEMOVE aufgerufen
void OnHover(HWND hWnd)
{
	if(!bIsTracking)
	{
		TRACKMOUSEEVENT tme;
		tme.cbSize = sizeof(TRACKMOUSEEVENT);
		tme.dwFlags = TME_LEAVE;
		tme.hwndTrack = hWnd;

		if(TrackMouseEvent(&tme))
			bIsTracking = TRUE;

		// entsprechende Grafik für den Button setzen
	}
}

// Wird bei WM_MOUSELEAVE aufgerufen
void OnLeave(HWND hWnd)
{
	bIsTracking = FALSE;

	// entsprechende Grafik für den Button setzen ...
}

Gruß
Shai
 
Hallo Ihr Lieben.

zunächst ein mal Sorry für de späte Reaktion, war aber gestern total im Stress und konnte nicht antworten.

Danke für Eure Tipps. Ich werde mich da mal an die Umsetzung versuchen. Schauen wir einmal, wie ich's hinkriege. Erste Versuche scheinen vielversprechend zu sein ;-)

Vielen Dank nochmal und ich werde bestimmt demnächst weitere Fragen stellen.

Markus
 

Neue Beiträge

Zurück