Avatar billede benjamin_ Nybegynder
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
Avatar billede jpk Nybegynder
02. april 2003 - 14:21 #1
Brug ScreenToClient
Avatar billede jpk Nybegynder
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);
Avatar billede benjamin_ Nybegynder
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
Avatar billede jpk Nybegynder
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...
Avatar billede jpk Nybegynder
02. april 2003 - 14:37 #5
Eller GetWindowRect hvis du vil checke for hele dit vindue...
Avatar billede benjamin_ Nybegynder
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
Avatar billede jpk Nybegynder
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
}
Avatar billede benjamin_ Nybegynder
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
Avatar billede benjamin_ Nybegynder
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
Avatar billede jpk Nybegynder
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å..?
Avatar billede benjamin_ Nybegynder
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
Avatar billede jpk Nybegynder
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
Avatar billede benjamin_ Nybegynder
03. april 2003 - 14:23 #13
Hmm..  hvordan sender man koordinaterne videre til mainwindow ?


- benjamin
Avatar billede jpk Nybegynder
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
Avatar billede jpk Nybegynder
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
Avatar billede benjamin_ Nybegynder
03. april 2003 - 23:24 #16
Det virker !!!  =)
Mange tak JPK for en suveræn hjælp!!


- benjamin
Avatar billede jpk Nybegynder
04. april 2003 - 08:28 #17
Velbekomme...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester