getch.c
来自「适合KS8695X」· C语言 代码 · 共 502 行 · 第 1/2 页
C
502 行
{KB_leftSquareBrace ,"KB_leftSquareBrace"},
{KB_rightSquareBrace ,"KB_rightSquareBrace"},
{KB_enter ,"KB_enter"},
{KB_A ,"KB_A"},
{KB_S ,"KB_S"},
{KB_D ,"KB_D"},
{KB_F ,"KB_F"},
{KB_G ,"KB_G"},
{KB_H ,"KB_H"},
{KB_J ,"KB_J"},
{KB_K ,"KB_K"},
{KB_L ,"KB_L"},
{KB_semicolon ,"KB_semicolon"},
{KB_apostrophe ,"KB_apostrophe"},
{KB_Z ,"KB_Z"},
{KB_X ,"KB_X"},
{KB_C ,"KB_C"},
{KB_V ,"KB_V"},
{KB_B ,"KB_B"},
{KB_N ,"KB_N"},
{KB_M ,"KB_M"},
{KB_comma ,"KB_comma"},
{KB_period ,"KB_period"},
{KB_divide ,"KB_divide"},
{KB_space ,"KB_space"},
{KB_tilde ,"KB_tilde"},
{0 ,"KB_unknown"},
};
/****************************************************************************
PARAMETERS:
x - X coordinate of the mouse cursor position (screen coordinates)
y - Y coordinate of the mouse cursor position (screen coordinates)
REMARKS:
This gets called periodically to move the mouse. It will get called when
the mouse may not have actually moved, so check if it has before redrawing
it.
****************************************************************************/
void EVTAPI moveMouse(
int x,
int y)
{
}
/****************************************************************************
PARAMETERS:
code - Code to translate
keys - Table of translation key values to look up
REMARKS:
Simple function to look up the printable name for the keyboard code.
****************************************************************************/
KeyEntry *FindKey(
int code,
KeyEntry *keys)
{
KeyEntry *key;
for (key = keys; key->code != 0; key++) {
if (key->code == code)
break;
}
return key;
}
/****************************************************************************
PARAMETERS:
evt - Event to display modifiers for
REMARKS:
Function to display shift modifiers flags
****************************************************************************/
void DisplayModifiers(
event_t *evt)
{
if (evt->modifiers & EVT_LEFTBUT)
printf(", LBUT");
if (evt->modifiers & EVT_RIGHTBUT)
printf(", RBUT");
if (evt->modifiers & EVT_MIDDLEBUT)
printf(", MBUT");
if (evt->modifiers & EVT_SHIFTKEY) {
if (evt->modifiers & EVT_LEFTSHIFT)
printf(", LSHIFT");
if (evt->modifiers & EVT_RIGHTSHIFT)
printf(", RSHIFT");
}
if (evt->modifiers & EVT_CTRLSTATE) {
if (evt->modifiers & EVT_LEFTCTRL)
printf(", LCTRL");
if (evt->modifiers & EVT_RIGHTCTRL)
printf(", RCTRL");
}
if (evt->modifiers & EVT_ALTSTATE) {
if (evt->modifiers & EVT_LEFTALT)
printf(", LALT");
if (evt->modifiers & EVT_RIGHTALT)
printf(", RALT");
}
}
/****************************************************************************
PARAMETERS:
msg - Message to display for type of event
evt - Event to display
REMARKS:
Function to display the status of the keyboard event to the screen.
****************************************************************************/
void DisplayKey(
char *msg,
event_t *evt)
{
KeyEntry *ascii,*scan;
char ch = EVT_asciiCode(evt->message);
ascii = FindKey(ch,ASCIICodes);
scan = FindKey(EVT_scanCode(evt->message),ScanCodes);
printf("%s: 0x%04X -> %s, %s, '%c'",
msg, (int)evt->message & 0xFFFF, scan->name, ascii->name, isprint(ch) ? ch : ' ');
DisplayModifiers(evt);
printf("\n");
}
/****************************************************************************
PARAMETERS:
msg - Message to display for type of event
evt - Event to display
REMARKS:
Function to display the status of the mouse event to the screen.
****************************************************************************/
void DisplayMouse(
char *msg,
event_t *evt)
{
printf("%s: ", msg);
if (evt->message & EVT_LEFTBMASK)
printf("LEFT ");
if (evt->message & EVT_RIGHTBMASK)
printf("RIGHT ");
if (evt->message & EVT_MIDDLEBMASK)
printf("MIDDLE ");
printf("abs(%d,%d), rel(%d,%d)", evt->where_x, evt->where_y, evt->relative_x, evt->relative_y);
DisplayModifiers(evt);
if (evt->message & EVT_DBLCLICK)
printf(", DBLCLICK");
printf("\n");
}
/****************************************************************************
PARAMETERS:
msg - Message to display for type of event
evt - Event to display
REMARKS:
Function to display the status of the joystick event to the screen.
****************************************************************************/
void DisplayJoy(
char *msg,
event_t *evt)
{
printf("%s: Joy1(%4d,%4d,%c%c), Joy2(%4d,%4d,%c%c)\n", msg,
evt->where_x,evt->where_y,
(evt->message & EVT_JOY1_BUTTONA) ? 'A' : 'a',
(evt->message & EVT_JOY1_BUTTONB) ? 'B' : 'b',
evt->relative_x,evt->relative_y,
(evt->message & EVT_JOY2_BUTTONA) ? 'A' : 'a',
(evt->message & EVT_JOY2_BUTTONB) ? 'B' : 'b');
}
/****************************************************************************
REMARKS:
Joystick calibration routine
****************************************************************************/
void CalibrateJoy(void)
{
event_t evt;
if(EVT_joyIsPresent()){
printf("Joystick Calibration\nMove the joystick to the upper left corner and press any button.\n");
EVT_halt(&evt, EVT_JOYCLICK);
EVT_halt(&evt, EVT_JOYCLICK);
EVT_joySetUpperLeft();
printf("Move the joystick to the lower right corner and press any button.\n");
EVT_halt(&evt, EVT_JOYCLICK);
EVT_halt(&evt, EVT_JOYCLICK);
EVT_joySetLowerRight();
printf("Move the joystick to center position and press any button.\n");
EVT_halt(&evt, EVT_JOYCLICK);
EVT_halt(&evt, EVT_JOYCLICK);
EVT_joySetCenter();
printf("Joystick calibrated\n");
}
}
/****************************************************************************
REMARKS:
Main program entry point
****************************************************************************/
int main(void)
{
event_t evt;
ibool done = false;
PM_HWND hwndConsole;
hwndConsole = PM_openConsole(0,0,0,0,0,true);
EVT_init(&moveMouse);
EVT_setMouseRange(1024,768);
CalibrateJoy();
do {
EVT_pollJoystick();
if (EVT_getNext(&evt,EVT_EVERYEVT)) {
switch (evt.what) {
case EVT_KEYDOWN:
DisplayKey("EVT_KEYDOWN ", &evt);
if (EVT_scanCode(evt.message) == KB_esc)
done = true;
break;
case EVT_KEYREPEAT:
DisplayKey("EVT_KEYREPEAT", &evt);
break;
case EVT_KEYUP:
DisplayKey("EVT_KEYUP ", &evt);
break;
case EVT_MOUSEDOWN:
DisplayMouse("EVT_MOUSEDOWN", &evt);
break;
case EVT_MOUSEAUTO:
DisplayMouse("EVT_MOUSEAUTO", &evt);
break;
case EVT_MOUSEUP:
DisplayMouse("EVT_MOUSEUP ", &evt);
break;
case EVT_MOUSEMOVE:
DisplayMouse("EVT_MOUSEMOVE", &evt);
break;
case EVT_JOYCLICK:
DisplayJoy("EVT_JOYCLICK ", &evt);
break;
case EVT_JOYMOVE:
DisplayJoy("EVT_JOYMOVE ", &evt);
break;
}
}
} while (!done);
EVT_exit();
PM_closeConsole(hwndConsole);
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?