ScreenToClient?
-
Hi Sepp,
ich habe es inzwischen auch schon gelesen, erhalte aber negative (wieder Desktop) - Koordinaten.
Der Code ist nicht schön. Und ich bin noch in der Lernphase

HWND hWnd=::FindWindow(NULL,"Plotter"); HDC hdc=::GetDC(hWnd); int xpos=0; int ypos=0; POINT pt = { xpos, ypos }; ::ScreenToClient(hWnd, &pt); int xwert=0; int ywert=0; xwert=pt.x; ywert=pt.y;Sry für das viele MFC

-
wenn du negative koordinaten erhälst, ist der mauszeiger oberhalb bzw. links von deinem client window würd ich jetzt mal spontan raten.
-
Das hat absolut nichts mit MFC zu tun und der Code den du da hast könnte genauso gut, jedes MFC freie C++ Projekt sein...
-
yogle|work schrieb:
Das hat absolut nichts mit MFC zu tun und der Code den du da hast könnte genauso gut, jedes MFC freie C++ Projekt sein...
unnütz++
-
Die Maus befindet sich definitiv im Fenster. Ist der Code ansich denn so richtig
geschrieben, oder habe ich da grobe Fehler gemacht?
-
Warum setzt du xpos und ypos auf 0 statt GetCursorPos() wie ganz oben?
-
das hat doch nix mit seinem problem zu tun.
-
Der Screen-Punkt ist in seinem Code (0,0).
Nehmen wir mal an der Client-Bereich des Fensters befindet sich an Position (13,37)Dann wird ScreenToClient() zurückliefern das der Screen-Punkt (0,0) den Client-Koordinaten (-13,-37) entspricht.
-
Danke euch. Geeky du hast natürlich recht. Jetzt funktioniert es

-
Oh, sry für die Nachwelt die die Suchfunktion nutzt:
HWND hWnd=::FindWindow(NULL,"Plotter"); HDC hdc=::GetDC(hWnd); POINT pt; GetCursorPos(&pt); ::ScreenToClient(hWnd, &pt); int xwert=0; int ywert=0; xwert=pt.x; ywert=pt.y; unsigned long RGB=GetPixel(hdc,xwert,ywert); unsigned char xxxR = GetRValue(RGB); unsigned char xxxG = GetGValue(RGB); unsigned char xxxB = GetBValue(RGB); CString cs_rot,cs_gruen,cs_blau; cs_rot.Format("%i",xxxR); cs_gruen.Format("%i",xxxG); cs_blau.Format("%i",xxxB); CString farbe; farbe=cs_rot; farbe+=","; farbe+=cs_gruen; farbe+=","; farbe+=cs_blau; CString xm,ym; xm.Format("%i",xwert); ym.Format("%i",ywert); CString koor; koor="x: "; koor+=xm; koor+="\n\n"; koor+="y: "; koor+=ym; MessageBox(farbe,"RGB-Wert des Pixel auf dem die Maus steht!"); MessageBox(koor,"Mauskoordinaten x,y");
-
Hmm sagt mal...wenn ich nun in dem Fenster mit SetCursorPos arbeiten will,
muss ich da zwingend mit SendMessage arbeiten?hWnd->SendMessage(WM_???, 0, MAKELPARAM(400,563)); //welche WM nehmen?
-
Plow schrieb:
Hmm sagt mal...wenn ich nun in dem Fenster mit SetCursorPos arbeiten will,
muss ich da zwingend mit SendMessage arbeiten?hWnd->SendMessage(WM_???, 0, MAKELPARAM(400,563)); //welche WM nehmen?Ich verstehe diese Frage nicht!
-
Ich meinte:
Wie kann ich in einer fremden Anwendung die Maus auf eine bestimmte
Koordinate des fremden Fensters setzen. Dazu habe ich ein Beispiel
gepostet, wie ich glaube, dass es gehen würde.Mit SendMessage halt. Wobei mir nicht klar ist welche Message man schickt.
WM_LBUTTONDOWN führt ja auch gleich zu einem "Klickereignis"...ich will ja
nur bewegen. Nimmt man da sowas wie MOVE?*grml* Kaum hat man Auftrieb gibts vom MVP voll eins in die Fresse...

-
Plow schrieb:
Wie kann ich in einer fremden Anwendung die Maus auf eine bestimmte Koordinate des fremden Fensters setzen.
Probier es mal mit SetCursorPos ().
-
merker schrieb:
Plow schrieb:
Wie kann ich in einer fremden Anwendung die Maus auf eine bestimmte Koordinate des fremden Fensters setzen.
Probier es mal mit SetCursorPos ().
und ermittle die koordinaten mit ClientToScreen!