day & night

Координаты курсора, Как перехватить в Си
Дата обновления: , перейти к новому сообщению
icon14
#1
EvilHaT



Unregistered














Пишу прогу в Си и тока ща дошло что я не знаю как получить и изменять координаты курсора относительно всего экрана...У кого какие мысли?
Go topGo end
 

Ответов(1 - 9)
1.04.2007 - 13:40
#2
yah



профи!
[SoftoRooMTeaM] Group Icon

Группа: Наши Люди
Сообщений: 2.336
Регистрация: 27.01.2006
Из: рнд
Пользователь №: 500


Респектов: 408
-----XXX--




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);
User is offline
Go topGo end
4.04.2007 - 21:57
#3
EvilHaT



Unregistered














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

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

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

Добавлено:

ЗЫЫЫ: Пишу в Builder'е
Go topGo end
4.04.2007 - 22:06
#4
yah



профи!
[SoftoRooMTeaM] Group Icon

Группа: Наши Люди
Сообщений: 2.336
Регистрация: 27.01.2006
Из: рнд
Пользователь №: 500


Респектов: 408
-----XXX--




Как я понял, тебе нужно отслеживать координаты курсора в реальном времени?
User is offline
Go topGo end
4.04.2007 - 22:08
#5
EvilHaT



Unregistered














Можно и в реальном, а можно и только при перемещении...
Go topGo end
5.04.2007 - 8:42
#6
newmailqu



Опытный юзверь
**

Группа: Пользователи
Сообщений: 115
Регистрация: 25.09.2006
Пользователь №: 234.709


Респектов: 9
-----X----


Предупреждений: 0


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
передает координаты относительно одного объекта, и если курсор попадает на другой, то и координаты будут другие

вероятно я чего то не так понял?
User is offline
Go topGo end
5.04.2007 - 9:23
#7
yah



профи!
[SoftoRooMTeaM] Group Icon

Группа: Наши Люди
Сообщений: 2.336
Регистрация: 27.01.2006
Из: рнд
Пользователь №: 500


Респектов: 408
-----XXX--




Е-мое, а я стараюсь через Апи забабахать, а то, что у компонентов есть вкладка "Evets" совсем забыл biggrin.gif
User is offline
Go topGo end
5.04.2007 - 19:54
#8
EvilHaT



Unregistered














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

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

Добавлено:

Ну разумеется можно и для кнопки сформировать такую же функцию, но так уже будут другие координаты, относительно начала самой кнопки...опять все тотже косяк...
Go topGo end
5.04.2007 - 21:36
#9
yah



профи!
[SoftoRooMTeaM] Group Icon

Группа: Наши Люди
Сообщений: 2.336
Регистрация: 27.01.2006
Из: рнд
Пользователь №: 500


Респектов: 408
-----XXX--




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 ); //распределяет сообщение оконной процедуре.

  }
}
}
User is offline
Go topGo end
5.04.2007 - 22:02
#10
EvilHaT



Unregistered














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

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

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

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

Добавлено:

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

Topic Options
Сейчас: 12.05.2024 - 6:08
Мобильная версия | Lite версия