Определение положения курсора на Image

Vova92

Приветствую! Реализовывал на Delphi такую замечательную штуку:
GetCursorPos(pt);
pt := image1.ScreenToClient(pt);
Будьте добры, подскажите как осуществить подобное на С++, есть такое, но оно работает не должным образом:
GetCursorPos(&pt);
Image1->ScreenToClient(Form1->Handle,&pt);
Спасибо большое!
6 ответов

Vova92

TPoint ACursorPt;
GetCursorPos(&ACursorPt);
ACursorPt = Image1->ScreenToClient(ACursorPt);


Vova92

Спасибо огромное, скопировал в тему немного не тот код, была реализация как у вас, компилятор выдавал ошибку несовместимости типов, проблема оказалось в том, что я переменную обозначил как POINT.


Vova92

Не надо смешивать VCL и API.
void __fastcall TForm1::Image1Click(TObject * Sender) {
        TPoint P = Image1->ScreenToClient(Mouse->CursorPos);
        ShowMessage(IntToStr(P.x) + " | " + IntToStr(P.y));
}
И на Делфи аналогично.
((TImage*) Sender)->...


Vova92

Не надо смешивать VCL и API
Вот лишь бы что-то ляпнутьИсходник файла Controls.pas
function TMouse.GetCursorPos: TPoint;
begin
  if not Windows.GetCursorPos(Result) then
    Result := Point(0, 0);
end;


Vova92

Реализация метода VCL тут не при чём. При разработке надо считать её чёрным ящиком. Реализация может меняться в зависимости от версии VCL и от целевой платформы. Используем VCL - не используем API.


Vova92

BOGG ART,
Используем VCL - не используем API.
Во-первых, не API, a Windows API. Во-вторых, VCL - это библиотека визуальных компонентов, которая работает только под Windows и только используя WinAPI. И конечно она не охватывает (не оборачивает) 100% всех функций WinAPI. Я уверен, что и в твоих приложениях полно не обернутых функций таких как CreateProcess, StretchBlt и т.д.Пруф из доки:
Visual Component Library (VCL) is an object hierarchy of visual components that are supported on Windows only (in Win32 and Win64 applications). The VCL framework does not use RTL cross-platform messaging solution; instead, it uses the Windows API messaging solution. This means that the VCL does not translate Windows messages into RTL messages for you, and VCL components communicate with each other using the Windows API as well. For a cross-platform solution you need to migrate from VCL to FireMonkey.