Твой софтовый форум > Тематические форумы > Программирование

Координаты курсора

,

Как перехватить в Си

Дата публикации: 05.04.2007 - 22:02
EvilHaT
Пишу прогу в Си и тока ща дошло что я не знаю как получить и изменять координаты курсора относительно всего экрана...У кого какие мысли?
yah
1.Тему нужно было в "Программирование".
2. Чтобы получить координаты курсора через WinApi, подключи windows.h, а затем:
CODE

POINT cursor_pos;
GetCursorPos( & cursor_pos);

А доступ к координатам курсора будет такой:
CODE

cursor_pos.x; //х - координата
cursor_pos.y; //у - координата


Изменять координаты курсора можно либо прибавляя значения к элементам х,у структуры сursor_pos. Либо через функцию SetCursorPos(int x, int y);
EvilHaT
Наверное я не вовсем правельно задал вопрос, суть в том, что я пишу приложение где много использую объеты Timage, и при передвижении курсора мне нужно получать его координаты. На первый взгляд может показаться, что может выручить функция "MouseMove", но это нет так, тк она передает координаты относительно одного объекта, и если курсор попадает на другой, то и координаты будут другие...Собственно вопрос: "Есть ли функция (или как ее написать), которая вызывалась при любом движении курсора на форме?"

ЗЫ: Таймер не предлогать, не подходит...

ЗЫЫ: за "POINT cursor_pos;
GetCursorPos( & cursor_pos);", спс

Добавлено:

ЗЫЫЫ: Пишу в Builder'е
yah
Как я понял, тебе нужно отслеживать координаты курсора в реальном времени?
EvilHaT
Можно и в реальном, а можно и только при перемещении...
newmailqu
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
TVarRec xy[2]={X,Y};
StatusBar1->Panels->Items[1]->Text=
Format("координаты курсора: X=%d,Y=%d",xy,2);
}

дает координаты перемещения по форме....а как понять
QUOTE
передает координаты относительно одного объекта, и если курсор попадает на другой, то и координаты будут другие

вероятно я чего то не так понял?
yah
Е-мое, а я стараюсь через Апи забабахать, а то, что у компонентов есть вкладка "Evets" совсем забыл biggrin.gif
EvilHaT
Не, я как раз про эту функцию и говорил. Она работает, только при перемещении курсора по голой форме, а если поставить любой объект, например кнопку, то фунцкия уже не будет получать координаты.

Вот тут-то косяк и всплывает...

Добавлено:

Ну разумеется можно и для кнопки сформировать такую же функцию, но так уже будут другие координаты, относительно начала самой кнопки...опять все тотже косяк...
yah
CODE

//-----

#include <vcl.h>
#pragma hdrstop
#include <windows.h>
#include "Unit1.h"
//-----
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-----
__fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
{
}
//-----

void __fastcall TForm1::Button1Click(TObject *Sender)
{
POINT point; //Структура, в которой будут храниться коорд. курсора
BOOL bRet;  //Переменная, в которой будет значение, возвращаемое GetMessage()
MSG msg;   //Структура, в которой будут храниться сообщения, посылаемые форме
//Цикл, в котором будем извлекать сообщения, передаваемые форме
while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0 )
{
  if (bRet == -1 ) //Если не получилось извлечь сообщение, то...
  {
     // ...обработка ошибки и возможный выход из программы
  }
  else
  {
  if(msg.message==WM_MOUSEMOVE) //если наше сообщение WM_MOUSEMOVE
  {
     GetCursorPos(&point); //Берем координаты курсора
     Edit1->Text=point.x;
     Edit2->Text=point.y;
  }
      TranslateMessage ( &msg );//переводит сообщения виртуальных клавиш в символьные сообщения.
      DispatchMessage( &msg ); //распределяет сообщение оконной процедуре.

  }
}
}
EvilHaT
ААА!!! yah, ты просто Бог!
На тебя можно малиться!user posted image

Черт, все настолько просто, лаконично и понятно, что я готов организорвать культ в твою честь, делать ритуальные жертвоприношения и пытаться поработить весь мир, чтоб потом тебе его и отдать!

Большой спс и респект.

Для респектов и спасибо есть кнопка "Thanks" или + wink.gif

Добавлено:

Ну, я уже вчера респектил, и поэтому мне предложили подождать денек тихо в углу, а я был так чертовский рад, что решил тут пока объеснить вдвух словах, что все работает и передать спс...


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке: Координаты курсора
SoftoRooM © 2004-2024