PDA

Просмотр полной версии : Вопрос по программированию.



MikeR
02.07.2003, 12:41
Надо - при нажатии джойстика в игре нажималась кнопка, а кнопка джойстика не нажималась.

Интересует пример программки/куска исходника.
Если знаете, где можно посмотреть по этой теме. А то я в виндовом api как хорёк в овощьном ларьке.

2 Модераторы. Если не тот топик перенесите плз.

FilippOk
02.07.2003, 20:06
Хороший вопрос.
"У меня под капотом стук. Объясните, пожалуйста, отчего он происходит."
Что за джойстик-то?

Saney
02.07.2003, 20:20
Originally posted by MikeR
Интересует пример программки/куска исходника.


Посмотри примеры DirectX SDK/DDK.

MikeR
03.07.2003, 01:23
FilippOk
HID любой от мягкотелых. Имхо при работе через DX не важно какой. Если через DX не делаеться и надо ваять драйвер, сорри вопрос отменяеться.

2 Saney
DDK смотрел - смерть всему живому, если действительно писать как там, прощё под nix wine настроить.
SDK - к сожалению не понял как "отменить" нажатие кнопки.

Glass Eagle
03.07.2003, 12:35
Originally posted by MikeR
Надо - при нажатии джойстика в игре нажималась кнопка, а кнопка джойстика не нажималась.А без DX-SDK не получится? Я примерно так делал в одной проге (писАл на билдере):

вызываешь при старте или в нужном месте:
joySetCapture(Handle,JOYSTICKID1,NULL,FALSE); // Hahdle - HWND окна

перехватываешь сообщение типа MM_JOYBUTTONDOWN:
void TWelMonForm::JoyButtonPress(TMessage& message)
{
// MM_JOY1BUTTONDOWN message.
if(!JoyCapture)
{
SendMessage(куда-наверно_своему_окну_(можно_любому),что_за_мессаджь,его_параметры1,его_параметры2); // Здесь будешь посылать клавишу
// или PostMessage(...);
//...
JoyCapture=1; // Don't capture more than 1 frame
}

Хорошо бы еще освободить, а то "залипнет":
void TWelMonForm::JoyButtonRelease(TMessage& message)
{
// MM_JOY1BUTTONUP message.
JoyCapture=0; // Release capture block.
}
А вообще-то, может и не надо освобождать - не помню, там прога была узко специфичная.

В билдере внутри класса окна надо еще вставить такую штуку с точностью до... т.е. без всяких ";" (типа таблицы отклика, кажется, раньше так это называлось)
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(MM_JOY1BUTTONDOWN,TMessage,JoyButtonPress)
MESSAGE_HANDLER(MM_JOY1BUTTONUP,TMessage,JoyButtonRelease)
END_MESSAGE_MAP(TControl)

Удачи!

orthodox
03.07.2003, 13:30
ух ё...

BTNC
03.07.2003, 14:02
HID дривер для дефолтного джоя нужно править\писать на предмет незалипания. боюсь что на более верхнем уровне этого не cделаешь.

MikeR
03.07.2003, 15:04
2 Glass Eagle
Идея я так понял такова - перехватываем мессагу, и потом делаем что хотим. Вопрос такой: эта мессага только до нашего окна дойдёт или до всех где за джойстиком следят ?
т.е. "нажмёться" кнопка джоя в игре или нет ?

2 BTNC
Складываеться впечатление, что так оно и есть =(.

Glass Eagle
03.07.2003, 23:39
Originally posted by MikeR
Вопрос такой: эта мессага только до нашего окна дойдёт или до всех где за джойстиком следят ?
т.е. "нажмёться" кнопка джоя в игре или нет ?...Честно говоря, шут его знает. В двух разных одновременно запущенных приложениях я не проверял. Хотя именно так и можно проверить - состряпать две маленькие проги, по-разному реагирующие на нажатие джоя - одна должна работать активной, вторая - в фоновом режиме - и проверить, среагирует только активная или обе. Вообще-то в WinAPI есть функции, которые должны/не должны ретранслировать сообщение дальше, но меня тоже всегда ломало писать для винды в её говенном классическом стиле.