вопрос: горячие клавиши в программе. С++

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем woka, 11 ноя 2010.

Статус темы:
Закрыта.
  1. woka

    woka Гость

    1. А скажите как зделать так чтобы при нажатии нескольких клавиш на клавиатуре и нажатием мыши по картинке открывалось новое окно?
    2. и как зделать так чтобы в можно было при нажатии нажатии нескольких определённых клавиш вызвать меню или зделать определённое действие(яркий пример коды в играх) как бы я предпологаю как зделать это
    Код (C++):
    getch()==27 //клавиша Esc
    но как зделать чтобы было несколько клавиш и они выполняли какуюто функцию я не доезжаю
     
  2. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Скажим форме отлавливать сообщения нажатия клавиш
    Код (C++):
    Form1->KeyPreview = true
    Функция обработки
    Код (C++):
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
    {
    switch (Key)
    {
    case 27: Application->Terminate();
    break;
    case 13: ShowMessage("Нажали Enter");
    break;
    default : ShowMessage("Нажали клавишу с кодом " + IntToStr(Key));
    };
    }
    //---------------------------------------------------------------------------
     
  3. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Ты имеешь в виду модификатор+(функциональная клавиша/буква) ? Или например три буквы нажать? Тут разный подход нужен...
     
  4. woka

    woka Гость

    три буквы нажать!
     
  5. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Думаю тебе стоит покопать в сторону DirectInput! Сам с ним мало дел имел, поэтому на данный момент сказать ничего не могу.
    Тут дело не в простой проверке пита:
    Код (C++):
    if ( iKeyCode == KEY_G ) ...
    Я думаю нужно использовать keyboard input buffer.
    Обещаю поискать, подумать. Немного позже сообщу о результатах.

    И еще. Меня вот что интересует:
    Не совсем понял.. тебе их нужно одновременно нажимать или последовательно? Коды в играх вроде как последовательно вводятся..
     
  6. woka

    woka Гость

    на другом форуме мне сказали копать в сторону HOOKов но я не чего не на копал! посмотрим что здесь

    без разницы! и так и так надо! скорее последовательно.
     
  7. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Вот примерно что я имел в виду:
    Код (C++):
    #define _WIN32_WINNT    0x0501
    #include <windows.h>
    #include <dx\dinput.h>
    #include <stdio.h>

    LPDIRECTINPUT8          pdi;
    LPDIRECTINPUTDEVICE8    pdid_kbd;

    BYTE                    keystate[256];

    int main( void )
    {
    DirectInput8Create( GetModuleHandle( NULL ), DIRECTINPUT_VERSION, IID_IDirectInput8, (void **)&pdi, NULL );
    pdi->CreateDevice( GUID_SysKeyboard, &pdid_kbd, NULL );
    pdid_kbd->SetDataFormat( &c_dfDIKeyboard );
    pdid_kbd->SetCooperativeLevel( NULL, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND );
    pdid_kbd->Acquire();

    printf( "Hit Escape to exit.\n" );
    while ( 1 ) {
    pdid_kbd->GetDeviceState( 256, (LPVOID)keystate );
    if ( keystate[DIK_ESCAPE] & 0x80 ) break;

    printf( "\t\t\t\r" );

    if ( keystate[DIK_Q] & 0x80 ) printf( "Q" );
    if ( keystate[DIK_W] & 0x80 ) printf( "W" );
    if ( keystate[DIK_E] & 0x80 ) printf( "E" );
    if ( keystate[DIK_R] & 0x80 ) printf( "R" );
    if ( keystate[DIK_T] & 0x80 ) printf( "T" );
    if ( keystate[DIK_Y] & 0x80 ) printf( "Y" );

    fflush( stdout );

    Sleep( 20 );
    }
    pdid_kbd->Unacquire();
    pdi->Release();
    return 0;
    }
    Думаю я не ошибусь если скажу что коды одновременно нажатых 10 клавиш ты не получишь. Я думаю это связано с контроллерами клавиатур или что-то вроде того...
     
Загрузка...
Похожие Темы - вопрос горячие клавиши
  1. Генералл
    Ответов:
    2
    Просмотров:
    68
  2. ApplePen
    Ответов:
    0
    Просмотров:
    76
  3. gURaBA_N
    Ответов:
    3
    Просмотров:
    94
  4. ghost
    Ответов:
    1
    Просмотров:
    89
  5. kartaman
    Ответов:
    0
    Просмотров:
    128
Статус темы:
Закрыта.

Поделиться этой страницей