⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mouse.cpp

📁 DOS下的图形界面开发包
💻 CPP
字号:
#include "mouse.h"
#include "yyxsys.h"

mouse_class::mouse_class()
{
	reset();
	mouse_x=0; mouse_y=0;
	set_posn();
//	setup event handler

	m1=M_SET_EVENT_HNDL;
//	m3=0x2 | 0x4  	; // press & release LEFT BUTTON
	m3=1			; // press & release LEFT BUTTON
	_ES =FP_SEG ((void far *) mouse_event_handler);
	m4 =FP_OFF ((void far*)  mouse_event_handler);
//	mouse(&m1,&m2,&m3,&m4);
	prev_cursor_state=FALSE;
	on(0);
}

mouse_class::~mouse_class()
{
	m1=M_SET_EVENT_HNDL;
//	m3=0x2 | 0x4  	; // press & release LEFT BUTTON
	m3=0			; // press & release LEFT BUTTON
	_ES =FP_SEG ((void far *) mouse_event_handler);
	m4 =FP_OFF ((void far*)  mouse_event_handler);
	mouse(&m1,&m2,&m3,&m4);
	reset();
}

void mouse_class::mouse(int *m1,int *m2,int *m3,int *m4)
{
	union REGS inregs,outregs;
	inregs.x.ax=*m1;
	inregs.x.bx=*m2;
	inregs.x.cx=*m3;
	inregs.x.dx=*m4;
	int86 (0x33,&inregs,&outregs);
	*m1=outregs.x.ax;
	*m2=outregs.x.bx;
	*m3=outregs.x.cx;
	*m4=outregs.x.dx;
}

BOOL mouse_class::reset()
{   m1=M_RESET;
	mouse(&m1,&m2,&m3,&m4);
	return (m1==-1);
}

void mouse_class::on(int restoreflag) //0 ;regardless of state; //1 conditional
//first 0; later 1;only if previous is on
{   if (!restoreflag||prev_cursor_state) {
		m1=M_SHOW_CURS;
		mouse (&m1,&m2,&m3,&m4);
		prev_cursor_state=TRUE;
	}
}

void mouse_class::off(int tempflag) //0 ;regardless of state; //1 conditional
//first 0; later 1;only if previous is on, set to off
//usually use (1)
{   if (prev_cursor_state) {
		m1=M_HIDE_CURS;
		mouse (&m1,&m2,&m3,&m4);
		if (!tempflag) prev_cursor_state=FALSE;
	}
}

void mouse_class::get_posn()
{
	m1=M_GET_STATUS;
	mouse (&m1,&m2,&mouse_x,&mouse_y);
}

void mouse_class::get_posn_xy(int &x,int &y)
{
	m1=M_GET_STATUS;
	mouse (&m1,&m2,&x,&y);
}

void mouse_class::set_posn(int x,int y)
{
	m1=M_SET_CURS;
	if (!x||!y)	mouse (&m1,&m2,&x,&y);
	else	mouse (&m1,&m2,&mouse_x,&mouse_y);
}

int mouse_class::get_press_count(int mouse_button)
{
	m1=M_GET_PRESS;
	m2=mouse_button;
	mouse (&m1,&m2,&m3,&m4);
	if (mouse_button==LEFT_BUTTON) left_button_status =m1; else
	if (mouse_button==RIGHT_BUTTON) right_button_status =m2;

	return (m2);	//0,1,2,3,4......since last call
}


int mouse_class::get_release_count(int mouse_button)
{
	m1=M_GET_REL;
	m2=mouse_button;
	mouse (&m1,&m2,&m3,&m4);
	if (mouse_button==LEFT_BUTTON) left_button_status =m1; else
	if (mouse_button==RIGHT_BUTTON) right_button_status =m2;

	return (m2);	//0,1,2,3,4......since last call
}

int mouse_class::mouse_event_handler(...)
{
	putch('\007');
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -