Beim überfahren mit der Maus
-
Hallo Leute,
wie Löse ich den eine Aktion aus, wenn ich in einem Dialog mit der Maus über einen Button fahre.
Ich möchte, dass wenn ich über den Button fahre sich der Button bewegt.
Es soll ein Schüttel efekt entstehen..Gruß
andy_mann
-
Mit GetWindowRect() kannst du dir die Position des Buttons holen.
Und im Dialog selbst gibt es WM_MOUSEMOVE, da bekommst du die Postition der Maus.Nun noch einige Vergleiche und du kannst den Button sich schütteln lassen.

-
Hallo,
vielen Dank für die schnelle Antwort.
Ok, WM_MOUSEMOVE ist kein Problem, wie vergleiche ich aber jetzt die Berreiche, und wie sage ich dann dass er Button versetzen soll ??
Gruß
andy_mann
-
Servus,
Geht auch so:
BOOL CDeinDlg::PreTranslateMessage(MSG* pMsg) { if ((pMsg->hwnd == m_ctrButton.m_hWnd) && (pMsg->message == WM_MOUSEMOVE)) { ZiehderKatzeAmSchwanz(); } return CDialog::PreTranslateMessage(pMsg); }Pretranslate einfügen. m_ctrButton ist ne Membervar von einem Button.
Wollte ich nur mal so loswerden......
Um den Button zu versetzen, kannst du dir ja mal die Methode SetWindowPos() anschauen. Um beide zu vergleichen musst du in deinem Dialog auf die MSG WM_MOUSEMOVE reagieren. Wenn du dann die Methode OnMouseMove(UINT nFlags, CPoint point) eingefügt hast, bekommst du über den Parameter point die Position des Mauscursors. Dann holst du dir nur noch die Position des Buttons z.B. GetClientRect() und vergleichst diese miteinander...
*winke*
Hellsgore
-
Hey, das mit PreTranslateMessage ist gut! Da muss man nicht selbst vergleichen.

-
Oh, vielen Dank,
fast Funkt es..
if ((pMsg->hwnd == m_ButtonErzeugen.m_hWnd) && (pMsg->message == WM_MOUSEMOVE)) { LPRECT m_Button; m_ButtonErzeugen.GetWindowRect(m_Button); m_ButtonErzeugen.SetWindowPos(&CWnd::wndBottom, m_Button->left+5, m_Button->top, m_Button->right+5, m_Button->bottom, SWP_NOSIZE); }irgendwas stimmt noch nicht...
Gruß
andy_mann
-
SetWindowPos(&wndTopMost,m_nCurrentPosX,m_nCurrentPosY,m_nBitmapWidth,m_nBitmapHeight,SWP_NOACTIVATE);
-
Hhhmmmm...
irgendwie checke ich es gerade NULL..
ich komme einfach nicht mit den tausenden Variablen Typen zurecht..
if ((pMsg->hwnd == m_ButtonErzeugen.m_hWnd) && (pMsg->message == WM_MOUSEMOVE)) { CRect m_wndRect; m_ButtonErzeugen.GetClientRect(&m_wndRect); UINT m_uZahl; CPoint m_point; OnMouseMove(m_uZahl, m_point); m_ButtonErzeugen.SetWindowPos(&CWnd::wndBottom, 0, 0, 0, 0, SWP_NOSIZE); }kann mir jemand Helfen ??
Gruß
andy_mann
-
klasse mit buttons klappt das wunderbar. wie mach ich das nun bei bmp. die ich verlinkt habe ?
BOOL CLosDososZielwasserDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen if ((pMsg->hwnd == GetDlgItem(IDC_INFO)->m_hWnd) && (pMsg->message == WM_MOUSEMOVE)) { ::SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR)); } else if ((pMsg->hwnd == m_button_hilfe.m_hWnd) && (pMsg->message == WM_MOUSEMOVE)) { ::SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR)); } return CDialog::PreTranslateMessage(pMsg); }if funzt ned
else if funzt
-
alles klar. hatte die benachrichtigung vergessen
