02. april 2003 - 14:18
Der er
16 kommentarer og
1 løsning
GetMousePos...
Hej.
Jeg er interesseret i at finde positionen af min mus i et bestemt window. Lige nu bruger jeg funktionen GetMousePos() og den giver mig musens lokation på hele skærmen. Men jeg er kun interesseret i position indenfor et bestemt window. Og dette skal også virke hvis parent vinduet bliver flyttet rundt.
Jeg er kun interesseret i at finde positionen i det bestemte vindue.. derfor skal positionen også matche det vindue..
- benjamin
02. april 2003 - 14:21
#1
Brug ScreenToClient
02. april 2003 - 14:25
#2
Den behøver vist ikke nærmere forklaring, men:
POINT ptMousePos; // Musens position på skærmen
// I Forhold til et bestemt vindue (handle m_hWnd)
ScreenToClient(m_hWnd, &ptMousePos);
02. april 2003 - 14:33
#3
Det virker helt fint lige bortset fra at når min mus nu er udenfor det bestemte window bliver positionen enten forkert...
Er der en måde hvorpå jeg kan checke om musen er "ovenpå" det bestemte window?
- benjamin
02. april 2003 - 14:35
#4
Med GetClientRect, så kan du checke om musens point er inde i rect'et før du bruger ScreenToClient...
02. april 2003 - 14:37
#5
Eller GetWindowRect hvis du vil checke for hele dit vindue...
02. april 2003 - 14:39
#6
Okay..
Ville denne message kunne gøre noget tilsvarende..: ??
WM_MOUSEMOVE
fwKeys = wParam; // key flags
xPos = LOWORD(lParam); // horizontal position of cursor
yPos = HIWORD(lParam); // vertical position of cursor
- benjamin
02. april 2003 - 14:44
#7
Det er vel noget lign.:
RECT r;
GetWindowRect(m_hWnd, &r);
POINT p = (POINT)MAKEPOINTS(lParam);
if(PtInRect(&r, p))
{
// Det var inde for vinduet
}
02. april 2003 - 15:10
#8
men vil det virke hvis min msgproc er til mit parentwindow og ikke til mit childwindow som jeg er interesseret i at få koordinatpositionen fra..?
- benjamin
02. april 2003 - 15:11
#9
hvis jeg blot laver :
WM_MOUSEMOVE
fwKeys = wParam; // key flags
xPos = LOWORD(lParam); // horizontal position of cursor
yPos = HIWORD(lParam); // vertical position of cursor
så giver den mig kun koordinater som er indenfor parentwindow. Alle childwindows som ligesom ligger og dækker parentwindow får den ikke koordinater fra..
- benjamin
03. april 2003 - 08:43
#10
Næ, dine childwindows bør jo selv håndtere WM_MOUSEMOVE messages...
Måske du kunne forklare hvad det er du vil opnå..?
03. april 2003 - 12:46
#11
Jeg har et "main"-window med en masse knapper, listboxe, osv..
Men jeg har også et window hvorpå jeg tegner noget grafik.. Jeg vil finde koordinatet på dette window og udskrive dette i et static window..
Koordinatet skal bruges til nogle efterfølgende beregninger..
- benjamin
03. april 2003 - 12:59
#12
En løsning kunne være at fange WM_MOUSEMOVE messages i dit child window og så sende koordinaterne videre til dit main window
03. april 2003 - 14:23
#13
Hmm.. hvordan sender man koordinaterne videre til mainwindow ?
- benjamin
03. april 2003 - 14:28
#14
Du kan bruge SendMessage eller PostMessage.
Det kræver blot, at du har et handle til dit main window, det kan du få ved:
HWND hParent = GetParent(m_hWnd); // Hvor m_hWnd er dit nuværende (child) window
03. april 2003 - 14:32
#15
Til det formål kan du definere en ny message
#define UM_MOUSEPOS WM_USER+1
Og sende den således
PostMessage(hParent, UM_MOUSEPOS, x, y);
I dit main window kan du så fange UM_MOUSEPOS og bruge informationen
03. april 2003 - 23:24
#16
Det virker !!! =)
Mange tak JPK for en suveræn hjælp!!
- benjamin
04. april 2003 - 08:28
#17
Velbekomme...
Kurser inden for grundlæggende programmering