Клавиатура и мышь
int getch(int special=0);
Считать код нажатой клавиши на клавиатуре. Если клавиша не нажата, то ожидать нажатия. Есть аналогичная функция в <coniow.h>,
но здесь другая несовместимая реализация.
Для специальных клавиш функция сначала возвращает число 0, затем скан-код. Для обычных клавиш - ASCII-код.
Специальными клавишами являются KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_F11, KEY_F12, KEY_NUM_LOCK, KEY_SCROLL_LOCK, KEY_HOME, KEY_UP, KEY_PGUP, KEY_LEFT, KEY_CENTER (кнопка 5 при выключенном NumLock), KEY_RIGHT, KEY_END, KEY_DOWN, KEY_PGDN, KEY_INSERT, KEY_DELETE, KEY_CTRL, KEY_SHIFT, KEY_ALT.
Обычными клавишами - остальные, включая KEY_ESC, KEY_TAB, KEY_BACKSPACE, KEY_ENTER.
При указании аргумента 1, для специальных клавиш возвращается одно значение - KEY_SPECIAL+код клавиши.
При указании аргумента 2 также возвращаются нажатия кнопок на мыши - MOUSE_LCLICK, MOUSE_LDBLCLICK, MOUSE_RCLICK, MOUSE_RDBLCLICK, MOUSE_WHEELUP, MOUSE_WHEELDOWN.
При нажатии X для закрытия окна открытого в режиме closeall=false возвращается код WINDOW_CLOSE.
int kbhit(int mousehit=0);
Проверить, была ли нажата клавиша на клавиатуре. Если клавиша не нажата, то вернуть 0, иначе ненулевое значение. Считать код нажатой клавиши можно с помощью getch. Есть аналогичная функция в <coniow.h>,
но здесь другая несовместимая реализация.
При указании аргумента не равного 0, проверяются клики мыши.
int controlkeystate(void);
Узнать текущее состояние управляющих клавиш в виде набора битов (Ctrl, Alt, Shift)
int keystate(int key);
Узнать текущее состояние клавиши key. Для специальных клавиш нужно передать KEY_SPECIAL+код клавиши, для клавиш с символами - символ без нажатия Shift. Возвращается 0, если клавиша не нажималась, 1, если нажата в данный момент, 2, если только что была отпущена (при повторном обращении вернет 0). Так как нажатые клавиши попадают в буфер клавиатуры, для их удаления выполнять цикл while(kbhit()) getch(1);
int mousex(void);
Получить координату x указателя мыши.
int mousey(void);
Получить координату y указателя мыши.
int mousebuttons(void);
Получить состояние кнопок мыши. Если нажата левая кнопка, то возвращается 1, правая - 2, обе - 3.
Пример использования:
int waitclick(int *x1, int *y1, int *x2, int *y2) {
int b;
while((b=mousebuttons())==0) { // ждем нажатия кнопки
if(kbhit()) return 0; // если нажата клавиша - выйти
}
*x1=mousex();
*y1=mousey();
while(mousebuttons()==0); // ждем отпускания кнопки
*x2=mousex();
*y2=mousey();
return b;
}
// вызов
int b,x1,y1,x2,y2;
b=waitclick(&x1,&y1,&x2,&y2);
if(b==1) {
нажата левая кнопка, мышь двигалась из (x1,y1) в (x2,y2)
}
void registermousehandler(int kind, void (*func)( int, int ));
Установить обработчик для событий мыши. Первый аргумент kind может принимать значения WM_MOUSEMOVE (перемещение мыши), WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK (левая кнопка), WM_RBUTTONDOWN, WM_RBUTTONUP, WM_RBUTTONDBLCLK (правая кнопка), WM_MBUTTONDOWN, WM_MBUTTONUP, WM_MBUTTONDBLCLK (средняя кнопка), WM_MOUSEWHEEL (вращение колесика), WM_XBUTTONDOWN, WM_XBUTTONUP, WM_XBUTTONDBLCLK (боковые кнопки), WM_MOUSEHWHEEL (вращение бокового колесика). В качестве второго аргумента указывается функция обработки события, этой функции передаются координаты x,y курсора мышки в момент события (для вращения колесика в качестве первого аргумента - размер сдвига). Для отмены обработки вторым аргументом указать NULL. Вызывать функцию registermousehandler нужно после создания окна.
Пример использования:
void wheelhandler(int x, int y)
{
if(x<0)
{ // вниз
}
else
{ // вверх
}
}
int main() {
initwindow(800,600);
registermousehandler(WM_MOUSEWHEEL,wheelhandler);
...
}
void delay(unsigned msec);
Задержка на указанное число миллисекунд.