Entwickler-Ecke

Windows API - an daten der windowinfostructure kommen


nepleurepas - So 20.04.08 16:17
Titel: an daten der windowinfostructure kommen
Hallo,
ich möchte die größe eines fensters herausfinden. Nun hab ich in der msdn library nachgeschaut. Meine frage: Wie kann ich UINT in integer oder etwas ähnliches umwandeln?

Und weiter, was bedeutet :
cbSize
The size of the structure, in bytes. The caller must set this to sizeof(WINDOWINFO).

könnte mir da vllt jemand ein codebsp geben, wie das mit setzen der größe funktioniert? Ich verstehe den sinn nicht. Ich kenne doch die größe von dem fenster noch gar nicht bevor ich die funktion aufrufe...


thx für antworten
stefan


Delete - So 20.04.08 16:44

GetWindowRect dürfte hier wohl einfacher sein.


nepleurepas - So 20.04.08 16:54

user profile iconLuckie hat folgendes geschrieben:
GetWindowRect dürfte hier wohl einfacher sein.


gleiches problem für mich. Wie kann ich mit lprect an greifbare daten kommen? Ich weiß dass es ein pointer ist, aber wie kann dann direkt die werte als integer erhalten??

thx stefan


Biergeneral - So 20.04.08 20:14

Ich glaub da liegen dir ein paar Missverständnisse vor.

Also der aufruf von GetWindowInfo ist im Prinzip ganz einfach:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure Machet(handle: HWND);
var
  wndInfo: TWindowInfo;
begin
  wndInfo.cbSize := sizeOf(TWindowInfo); 
  { die cbSize gibt hier keine Größe an, die irgendwas mit dem Fenster zu tun hat, sondern ist notwendig für
    die Methode and die du die wndInfo übergibts.
    Du schreibst dort also rein, wie groß das Record in Bytes ist. }

  if GetWindowInfo(handle, wndInfo) then
  begin
    MachIrgendwas;
  end;
end;


Und ja, in diesem Fall ist GetWindowRect wohl die einfachere Variante. Funktioniert so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure Machet(handle: HWND);
var
  wndRect: TRect;
begin
  {Das lpRect ist in dem Sinne kein Pointer. Delphi deklariert das ganze als Var parameter.
   Also ein Übergabewert, der in der aufgerufenen nur Referenziert wird. Sprich Wenn GetWindowRect etwas
   in dem Übergabewert wndRect verändert, ist das wndRect danach in der Methode Machet auch verändert}

  if GetWindowRect(handle, wndRect) then
  begin
    MachWas;
  ShowMessage(format('Left: %d; Right: %d; Top: %d, Bottom: %d', 
                     [wndRect.Left, wndRect.Right, wndRect.Top, wndRect.Bottom]));
  end;
end;


nepleurepas - Mi 30.04.08 17:05

ok, alles klar

Danke