"GetWindowRect"

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Michael
Rookie
Rookie
Beiträge: 18
Registriert: Mo, 27. Feb 2006 12:15
Wohnort: Schweiz

"GetWindowRect"

Beitrag von Michael »

Ich möchte gerne ein anderes externes Fenster an meine Applikation "andocken"

Dafür brauch ich muss ich die Position setzten & die grösse beibehalten

Das verändern der grösse/Pos hab ich herausgefunden:

Code: Alles auswählen

hWindow := DLLCALL( USER32DLL, DLL_STDCALL, "FindWindowA", 0, cName )
DLLCALL( "user32", 32,"MoveWindow", hWindow,100,100,1000,1000, .T.)
Nun brauch ich noch die aktuelle grösse

Code: Alles auswählen

cTest := Space(32)
BOOL GetWindowRect(   HWND hWnd,    LPRECT lpRect )
http://msdn2.microsoft.com/en-us/library/ms633519.aspx
Lprect: http://msdn.microsoft.com/library/defau ... _types.asp

so versucht: (und auf andere Arten)
Benötigt die BAP.dll von Alaska

Code: Alles auswählen

 aBin:=BaInit(1)
 nTest:=0
 BaStruct(aBin, @nTest)
 aBin := BaAccess(aBin)
 DLLCALL( "user32", 32,"GetWindowRect", hWindow, @aBin )

Code: Alles auswählen

DLLCALL( "user32", 32,"GetWindowRect", hWindow, @cTest )
der Rückgabe Wert von aBin/cTest ist immer "d". Auch wenn ich nur einen String (32 Bit) übergebe kommt "d" zurück. Versucht diesen irgendwie zu verwerten aber erhalte kein Ergebnis.

Hat Jemand eine Idee?

Danke
Michael
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Michael,
kann es sein, dass Du einen Pointer zurückbekommst?
Dann müßtest Du diesen "de-referenzieren" - das entsprechende Tool findest Du auf den Seiten von Phil Ide.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Michael
Rookie
Rookie
Beiträge: 18
Registriert: Mo, 27. Feb 2006 12:15
Wohnort: Schweiz

Beitrag von Michael »

Hallo Martin

Hab ich schon versucht. (Die BAP.DLL hat den gleichen Befehl)

BaDereference(bin2L(cTest))
BaDereference(cTest)
-> NIL
PGDeref() gibt auch NIL zurück

"d" ist 100 ist dieser Pointer nicht etwas zu kurz?

BaDereference( nAddr)
=============
Interpretes nAddr as a pointer to a pointer, and
returns the numeric value of the dereferenced
pointer.
declaration: char **ptr.

Grüsse
Michael
hschmidt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 164
Registriert: Mo, 09. Jan 2006 17:06
Wohnort: Paderborn
Hat sich bedankt: 2 Mal
Kontaktdaten:

Beitrag von hschmidt »

Hallo Michael,

versuch's mal so:

Code: Alles auswählen

   LOCAL cBuffer     := Space(16)

   DllCall("User32.DLL", DLL_STDCALL,"GetWindowRect", hWindow, @cBuffer)

   nLeft    := Bin2U(substr(cBuffer,  1, 4))
   nTop     := Bin2U(substr(cBuffer,  5, 4))
   nRight   := Bin2U(substr(cBuffer,  9, 4))
   nBottom  := Bin2U(substr(cBuffer, 13, 4))
Schöne Feiertage

Hans
Michael
Rookie
Rookie
Beiträge: 18
Registriert: Mo, 27. Feb 2006 12:15
Wohnort: Schweiz

Beitrag von Michael »

Hallo hschmidtm

Super das geht wunderbar

Weihnachten gerettet. :)

Grüsse
Michael


p.s. auch schöne Feiertage
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: "GetWindowRect"

Beitrag von AUGE_OHR »

hi,
Michael hat geschrieben: Ich möchte gerne ein anderes externes Fenster an meine Applikation "andocken"
Dazu gibt es oDlg:moveWithOwner := .T.
Als Owner wird der Parent gesetzt.

Code: Alles auswählen

FUNCTION SUBDOCK(oParent)
...
   oDlg := XbpDialog():new( AppDesktop(),oParent, aPos, aSize, , .F.)
   oDlg:titlebar := .F.
   oDlg:border        := XBPDLG_SIZEBORDER      // will ReSize
   oDlg:moveWithOwner := .T.
   oDlg:drawingArea:bitmap := 1001
   oDlg:Resize := {|aOld,aNew,oSelf| myResize( aOld, aNew , oSelf)  }
   oDlg:create()
beim ":resize" werden nun die Werte des oParent benutzt um die neue
Grösse zu bestimmen, alles ohne API.

gruss by OHR
Jimmy
Antworten