📄 ninput.h
字号:
{
g_tail_count = 0;
}
}
}
#else
g_key = key;
#endif
}
void install_keyboard(void)
{
g_scan_key = g_ascii_key = g_key = 0;
memset(keyflag,0,sizeof(keyflag));
g_head_count = g_tail_count = 0;
old_key_int=getvect(9);
setvect(9,new_key_int);
g_routines |= 8;
}
void remove_keyboard(void)
{
setvect(9,old_key_int);
g_routines &= 247;
}
unsigned char _getch(void)
{
if (_keyboard_installed)
{
while (!keypressed());
return get_asc();
}
else
{
#ifndef NEO_sys_report_error_unused
Errinfo_t error = {"_getch", N_KEYB_NOT_INIT, 1};
throw_error(error);
#endif
return getch();
}
}
unsigned char get_asc(void)
{
#ifndef NEO_key_buffer_unused
unsigned key;
if (g_head_count != g_tail_count) /*缓冲区非空时*/
{
key = g_key_buf[g_tail_count];
if ( !((++g_tail_count) < KEY_BUF_SIZE) )
{
g_tail_count = 0;
}
return key & 0xff;
}
return 0;
#else
unsigned curkey = 0;
if (g_keypress == 1)
{
curkey = g_ascii_key;
g_ascii_key = 0;
}
return curkey;
#endif
}
unsigned char get_scan(void)
{
#ifndef NEO_key_buffer_unused
unsigned key;
if (g_head_count != g_tail_count) /*缓冲区非空时*/
{
key = g_key_buf[g_tail_count];
if ( !((++g_tail_count) < KEY_BUF_SIZE) )
{
g_tail_count = 0;
}
return (key & 0xff00) >> 8;
}
return 0;
#else
unsigned curkey = 0;
if (g_keypress == 1)
{
curkey = g_scan_key;
g_scan_key = 0;
}
return curkey;
#endif
}
char keypressed(void)
{
if (_keyboard_installed)
{
#ifndef NEO_key_buffer_unused
return g_head_count != g_tail_count? TRUE : FALSE;
#else
if (g_keypress == 1)
{
g_keypress = 0;
return TRUE;
}
return FALSE;
#endif
}
else return kbhit();
}
char scan_asc_key(unsigned char scankey, unsigned char asckey)
{
int i;
if (_get_scan() == scankey)
{
for (i = 0; i < g_combine_keys_delay; ++i);
return (_get_asc() == asckey?1 : 0);
}
else return 0;
}
#endif
#ifndef NEO_mouse_bas_unused
/*函数功能: 初始化鼠标器. *
*参数说明: 无. *
*返回说明: 成功则返回鼠标器按键个数;否则返回0. *
*备 注: 底层鼠标控制函数.用户通过nadmouse.h中的高*
* 鼠标控制函数间接调用 */
int init_mouse(void)
{
_AX=0x00;
__int__(0x33);
if (_AX)
{
return (_BX);
}
else
{
return (0);
}
}
/*---------------------------------------------------*
*函数功能: 获取当前鼠标光标X坐标. *
*参数说明: 无. *
*返回说明: 返回光标X坐标. *
*备 注: 底层鼠标控制函数.用户通过nadmouse.h中的高*
* 鼠标控制函数间接调用 *
*---------------------------------------------------*/
int get_mouse_x(void)
{
_AX=0x03;
__int__(0x33);
return _CX;
}
/*---------------------------------------------------*
*函数功能: 获取当前鼠标光标Y坐标. *
*参数说明: 无. *
*返回说明: 返回光标Y坐标. *
*备 注: 底层鼠标控制函数.用户通过nadmouse.h中的高*
* 鼠标控制函数间接调用 *
*---------------------------------------------------*/
int get_mouse_y(void)
{
_AX=0x03;
__int__(0x33);
return _DX;
}
/*---------------------------------------------------*
*函数功能: 获取当前鼠标按钮状态. *
*参数说明: 无. *
*返回说明: 返回按钮状态标志 *
* 返回0: 表示左右按键都没按下; *
* 返回1: 表示左键按下; *
返回2: 表示右键按下; *
返回3: 表示左右键均被按下. *
*备 注: 底层鼠标控制函数.用户通过高*
* 鼠标控制函数间接调用 *
*---------------------------------------------------*/
char get_click(void)
{
_AX = 0x03;
__int__(0x33);
return _BX;
}
/*---------------------------------------------------*
*函数功能: 获取按钮按下状态. *
*参数说明: 变量key指定检查哪个键:等于0(或LEFT_KEY)时*
* 表示检查左键;等于1(或RIGHT_KEY)时检查右键*
* 整型指针型变量*x,*y用来记录最后一次按下指*
* 定键时的光标坐标;*count将记录调用该功能以*
* 来指定按键压下的总次数,超过65535溢出即置0*
*返回说明: 返回当前鼠标按钮状态(同get_click功能) *
*备 注: 底层鼠标控制函数.用户通过nadmouse.h中的高*
* 鼠标控制函数间接调用 *
*---------------------------------------------------*/
unsigned get_press_info(int key, int *p_x, int *p_y, int *p_count)
{
_BX = key;
_AX = 0x05;
__int__(0x33);
*p_x = _CX; /*指定键最后一次按下时的x坐标*/
*p_y = _DX; /*指定键最后一次按下时的y坐标*/
*p_count = _BX; /*返回调用该功能以来指定按键压下的总次数(超过65535溢出,即置0)*/
return _AX;
}
/*---------------------------------------------------*
*函数功能: 获取按钮放开状态. *
*参数说明: 变量key指定检查哪个键:等于0(或LEFT_KEY)时*
* 表示检查左键;等于1(或RIGHT_KEY)时检查右键*
* 整型指针型变量*x,*y用来记录最后一次按下指*
* 定键时的光标坐标;*count将记录调用该功能以*
* 来指定按键放开的总次数,超过65535溢出即置0*
*返回说明: 返回当前鼠标按钮状态(同get_click功能) *
*备 注: 底层鼠标控制函数.用户通过nadmouse.h中的高*
* 鼠标控制函数间接调用 *
*---------------------------------------------------*/
unsigned get_release_info(int key, int *p_x, int *p_y, int *p_count)
{
_BX = key;
_AX = 0x06;
__int__(0x33);
*p_x=_CX; /*指定键最后一次松开时的x坐标*/
*p_y=_DX; /*指定键最后一次松开时的y坐标*/
*p_count = _BX; /*返回调用该功能以来指定按键松开的总次数(超过65535溢出,即置0)*/
return _AX;
}
void locate_mouse(int x,int y)
{
_CX=x;
_DX=y;
_AX=0x04;
__int__(0x33);
}
/*---------------------------------------------------*
*函数功能: 显示鼠标光标. *
*参数说明: 无. *
*返回说明: 无. *
*备 注: 底层鼠标控制函数.不推荐用户使用.原因是它 *
* 在Win2000/WinXP下可能无法显示光标. *
*---------------------------------------------------*/
void show_hard_cur(void)
{
_AX = 0x01;
__int__(0x33);
}
/*---------------------------------------------------*
*函数功能: 隐藏鼠标光标.当鼠标光标改变了位置,要先调 *
* 用它来隐藏原来的光标,再调用show_hard_cur()来显 *
示新的光标,否则会破坏屏幕的显示内容. *
*参数说明: 无. *
*返回说明: 无. *
*备 注: 底层鼠标控制函数.由于与高版本的Windows兼 *
* 容性不好而不推荐用户使用. *
*---------------------------------------------------*/
void hide_hard_cur(void)
{
_AX = 0x02;
__int__(0x33);
}
/*---------------------------------------------------*
*函数功能: 设置光标的有效活动范围. *
*参数说明: xmin:水平方向活动的最小坐标. *
* xmax:水平方向活动的最大坐标. *
* ymin:垂直方向活动的最小坐标. *
* ymax:垂直方向活动的最小坐标. *
*返回说明: 无. *
*备 注: 底层鼠标控制函数.用户通过nadmouse.h中的高*
* 鼠标控制函数间接调用 *
*---------------------------------------------------*/
void set_mouse_range(int xmin, int ymin, int xmax, int ymax)
{
_AX = 7;
_CX = xmin;
_DX = xmax;
__int__(0x33);
_AX = 8;
_CX = ymin;
_DX = ymax;
__int__(0x33);
}
#endif
/*char check_wheel(void)
{
_AX=0x11;
__int__(0x33);
return g_wheel_flag = (_AX == 0x574D);
}*/
/*改变鼠标光标形状
Hardcur_T cur:为以上定义的形状 */
#ifndef NEO_mouse_exp_unused
void mouse_shape(Hardcur_T cur)
{
_BX = cur.hotx;
_CX = cur.hoty;
_ES = FP_SEG(&cur.cursor);
_DX = FP_OFF(&cur.cursor);
_AX = 0x09;
__int__(0x33);
}
/*---------------------------------------------------*
*函数功能: 设置鼠标的移动速度. *
*参数说明: vx,vy的缺省值:vx=8,vy=8.值越大速度越慢 *
*返回说明: 无. *
*备 注: 底层鼠标控制函数.用户通过nadmouse.h中的高*
* 鼠标控制函数间接调用 *
*---------------------------------------------------*/
void set_mouse_speed(int vx,int vy)
{
_CX = vx;
_DX = vy;
_AX = 0x0f;
__int__(0x33);
}
/*---------------------------------------------------*
*函数功能: 设置光标速度加速下限.当光标移动速度超过设*
置的下限后,光标速度将加倍. *
*参数说明: ms为每秒移动的下限单位(1ms约为1/1200英寸)*
* ms默认值为64/S. *
*返回说明: 无. *
*备 注: 底层鼠标控制函数.用户通过nadmouse.h中的高*
* 鼠标控制函数间接调用 *
*---------------------------------------------------*/
void speed_limit(int ms)
{
_DX = ms;
_AX = 0x13;
__int__(0x33);
}
void set_mouse_focus(char f_x, char f_y)
{
if (g_mouse_tp)
{
g_mouse_tp->logic_x = -f_x;
g_mouse_tp->logic_y = -f_y;
}
else
{
/*to be continue...*/
}
}
#endif
/*---------------------------------------------------*
*函数功能: 基于NEO_SDK鼠标器高级初始化. *
*参数说明: 无. *
*返回说明: 无. *
*备 注: 高级鼠标控制函数.用户程序必须在使用其它高*
* 级鼠标控制函数之前首先调用. *
*---------------------------------------------------*/
#ifndef NEO_mouse_adv_unused
char install_mouse(void)
{
int h, v;
int cur_x;
int cur_y;
char keys = init_mouse();
if (_mouse_installed) return FALSE;
/*底层鼠标控制初始化*/
if (!keys)
{
#ifndef NEO_sys_report_error_unused
Errinfo_t error = {"install_mouse", NOT_INIT_MOUSE, 1};
throw_error(error);
return FALSE;
#endif
}
if (!g_color_depth)
{
#ifndef NEO_sys_report_error_unused
Errinfo_t error = {"install_mouse", ERR_VIDEO_MODE, 0};
throw_error(error);
#endif
}
if ((g_mouse_tp = (Mouse_t *)malloc( sizeof (Mouse_t) )) == NULL)
{
#ifndef NEO_sys_report_error_unused
Errinfo_t error = {"install_mouse", NO_MEMORY, 0};
throw_error(error);
#endif
}
g_mouse_tp->iconbuffer_p = &g_mouse_tp->iconbuffer;
/*将鼠标的各项属性取默认值*/
#ifndef NEO_mouse_exp_unused
g_mouse_tp->advclickinfo = g_mouse_tp->logic_x = g_mouse_tp->logic_y = 0;
#else
g_mouse_tp->advclickinfo = 0;
#endif
cur_x = g_mouse_tp->x = (int)((g_rect_right-g_rect_left)>>1)-32;
cur_y = g_mouse_tp->y = (int)((g_rect_bottom-g_rect_top)>>1)-32;
g_mouse_tp->dblclickdelay = MID_DBLCLICK;/*当两次按下左键间隔小于MID_DBLCLICK即认为是双击*/
g_mouse_tp->oldclickinfo = -1;
common_flags &= 0xFFFB;
set_mouse_range(0, 0, g_rect_right, g_rect_bottom);
locate_mouse(g_mouse_tp->x, g_mouse_tp->y);
for (v = 0; v<32; v+=1)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -