Мышь в DirectInput7
От: Reunion  
Дата: 10.10.02 03:33
Оценка: 3 (1)
Привет всем.
Я пишу игру на DirectX7 и у меня возникла следующая проблема. Мне надо сделать кнопку. У кнопки 3 состояния: up (ненажата), down (курсор мыши над кнопкой и нажата левая кнопка мыши) и over (курсор мыши над кнопкой). Вопрос: как определить, что нажата левая кнопка мыши??? Я использую код:


    HRESULT hRes;
    DIDEVICEOBJECTDATA dod;
    DWORD dwElements = 1;

    while(!bDone){
        hRes = pDIMouse->GetDeviceData(sizeof(DIDEVICEOBJECTDATA), &dod, &dwElements, 0);
        if(hRes == DIERR_INPUTLOST){
            pDIMouse->Acquire();
            hRes = pDIMouse->GetDeviceData(sizeof(DIDEVICEOBJECTDATA), &dod, &dwElements, 0);
        }
        if(FAILED(hRes) || dwElements == 0)
            return mousedata;

        switch(dod.dwOfs){
            ...
            case DIMOFS_BUTTON0:
                if(dod.dwData & 0x80){
                    ...
                }
                break;
        }
    }


но вот, что получается: когда я нажимаю кнопку мыши моя кнопка становится down и тут же возвращается в over, хотя кнопка мыши все еще нажата.

PS. Хотелось бы укидеть код, заранее спасибо.

31.03.03 16:33: Перенесено модератором из 'Прочее' — H_D
Re: Мышь в DirectInput7
От: Hacker_Delphi Россия  
Дата: 31.03.03 13:11
Оценка:
Здравствуйте, Reunion, Вы писали:

R>Привет всем.

R>Я пишу игру на DirectX7 и у меня возникла следующая проблема. Мне надо сделать кнопку. У кнопки 3 состояния: up (ненажата), down (курсор мыши над кнопкой и нажата левая кнопка мыши) и over (курсор мыши над кнопкой). Вопрос: как определить, что нажата левая кнопка мыши??? Я использую код:
скип-скип-скип
R>но вот, что получается: когда я нажимаю кнопку мыши моя кнопка становится down и тут же возвращается в over, хотя кнопка мыши все еще нажата.
все проще — по приходу события надо утстановить флаг, что кнопка нажата... по приходу нового события она сбросится...
событие сообщает лишь о том, что состояние изменилось...
при этом 0x80 — кнопка "нажалась", 00 — "отпустилась"
... << RSDN@Home 1.0 beta 6a >>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.