Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Клиентские координаты


Автор: sjvov 10.2.2006, 10:24
Вот такая проблема: Нужно найти клиентские координаты окна. Вроде бы ни чего сложного, но не получается...
Делал так:

Код

Function myGetClientCoord(hWindow:Hwnd):Trect;
var WinRect,WinRectGlob:Trect;
    hParent,hParentTest:Hwnd;
begin
   hParent:=hWindow;
   hParent := GetAncestor(hParent,GA_PARENT);
   
   //Глобальные координаты род окна
   GetWindowRect(hParent, WinRect);
   //Глобальные координаты дочернего окна
   GetWindowRect(hWindow, WinRectGlob);   

   // Должны получиться клиентские
   Result.Left:=WinRectGlob.Left-WinRect.Left;
   Result.Top:=WinRectGlob.Top-WinRect.Top;
   Result.Right:=WinRect.Right-WinRectGlob.Right;
   Result.Bottom := WinRect.Bottom-WinRectGlob.Bottom;
end;


Такое ощущение, как будто считается бордер, а он не должен считаться.... или что нить другое.

Автор: Romikgy 10.2.2006, 14:04
ScreenToClient
не?

Автор: sjvov 14.2.2006, 20:16
Спасибо. Получилось

Код

Function myGetClientCoord(hWindow:Hwnd):Trect;
var WinRect,WinRectGlob:Trect;
    hParent:Hwnd;
    ClientPoint:TPoint;
begin
   hParent:=hWindow;
   
   //Глобальные координаты
   GetWindowRect(hWindow, WinRectGlob);
   
   //Получаем хэндл родителя
   hParent := GetAncestor(hParent,GA_PARENT);
   
   //Указываем, какие координаты хотим преобразовать
   ClientPoint.X:= WinRectGlob.Left;
   ClientPoint.Y:= WinRectGlob.Top;
   
   //Преобразуем координаты нашего окна, относительно родительского
   ScreenToClient(hParent, ClientPoint);
   
   //Находим ширину и высоту окна
   GetClientRect(hWindow,WinRect);

   //Возвращаем результат
   Result.Left   := ClientPoint.X;
   Result.Top    := ClientPoint.Y;
   Result.Right  := ClientPoint.X + WinRect.Right;
   Result.Bottom := ClientPoint.Y + WinRect.Bottom;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)