Координаты курсора, Как перехватить в Си |
EvilHaT
Unregistered
| Пишу прогу в Си и тока ща дошло что я не знаю как получить и изменять координаты курсора относительно всего экрана...У кого какие мысли? |
|
| |
1.04.2007 - 13:40 |
yah
профи!
[SoftoRooMTeaM]
Группа: Наши Люди Сообщений: 2.336 Регистрация: 27.01.2006 Из: рнд Пользователь №: 500
Респектов: 408
| 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); | |
| |
4.04.2007 - 21:57 |
EvilHaT
Unregistered
| Наверное я не вовсем правельно задал вопрос, суть в том, что я пишу приложение где много использую объеты Timage, и при передвижении курсора мне нужно получать его координаты. На первый взгляд может показаться, что может выручить функция "MouseMove", но это нет так, тк она передает координаты относительно одного объекта, и если курсор попадает на другой, то и координаты будут другие...Собственно вопрос: "Есть ли функция (или как ее написать), которая вызывалась при любом движении курсора на форме?"
ЗЫ: Таймер не предлогать, не подходит...
ЗЫЫ: за "POINT cursor_pos; GetCursorPos( & cursor_pos);", спс
Добавлено: ЗЫЫЫ: Пишу в Builder'е |
|
| |
4.04.2007 - 22:06 |
yah
профи!
[SoftoRooMTeaM]
Группа: Наши Люди Сообщений: 2.336 Регистрация: 27.01.2006 Из: рнд Пользователь №: 500
Респектов: 408
| Как я понял, тебе нужно отслеживать координаты курсора в реальном времени? | |
| |
4.04.2007 - 22:08 |
EvilHaT
Unregistered
| Можно и в реальном, а можно и только при перемещении... |
|
| |
5.04.2007 - 8:42 |
newmailqu
Опытный юзверь
Группа: Пользователи Сообщений: 115 Регистрация: 25.09.2006 Пользователь №: 234.709
Респектов: 9
Предупреждений: 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 передает координаты относительно одного объекта, и если курсор попадает на другой, то и координаты будут другие вероятно я чего то не так понял? | |
| |
5.04.2007 - 9:23 |
yah
профи!
[SoftoRooMTeaM]
Группа: Наши Люди Сообщений: 2.336 Регистрация: 27.01.2006 Из: рнд Пользователь №: 500
Респектов: 408
| Е-мое, а я стараюсь через Апи забабахать, а то, что у компонентов есть вкладка "Evets" совсем забыл | |
| |
5.04.2007 - 19:54 |
EvilHaT
Unregistered
| Не, я как раз про эту функцию и говорил. Она работает, только при перемещении курсора по голой форме, а если поставить любой объект, например кнопку, то фунцкия уже не будет получать координаты.
Вот тут-то косяк и всплывает...
Добавлено: Ну разумеется можно и для кнопки сформировать такую же функцию, но так уже будут другие координаты, относительно начала самой кнопки...опять все тотже косяк... |
|
| |
5.04.2007 - 21:36 |
yah
профи!
[SoftoRooMTeaM]
Группа: Наши Люди Сообщений: 2.336 Регистрация: 27.01.2006 Из: рнд Пользователь №: 500
Респектов: 408
| 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 ); //распределяет сообщение оконной процедуре.
} } }
| |
| |
5.04.2007 - 22:02 |
EvilHaT
Unregistered
| ААА!!! yah, ты просто Бог! На тебя можно малиться! Черт, все настолько просто, лаконично и понятно, что я готов организорвать культ в твою честь, делать ритуальные жертвоприношения и пытаться поработить весь мир, чтоб потом тебе его и отдать! Большой спс и респект. Для респектов и спасибо есть кнопка "Thanks" или + Добавлено:Ну, я уже вчера респектил, и поэтому мне предложили подождать денек тихо в углу, а я был так чертовский рад, что решил тут пока объеснить вдвух словах, что все работает и передать спс... |
|
| |
|
|