[r]
(1)#include "screen.h"
#define INT_MOUSE 0x33
#define M_LEFT 0x01 /* set if LEFT press */ #define M_RIGHT 0x02 /* set if RIGHT press */ #define M_CENTER 0x04 /* set if CENTER press */
#define M_CHANGE 0x08 /* set if mouse status is changed */ /* Keyboard coding bits */
#define KEY_NULL 0x0
#define ESC 0x1B
#define ENTER 0x0D
#define TAB '\t'
#define INS 0xD2
#define DEL 0xD3
#define BACKSPACE 0x8 #define HOME 0xC7 #define END 0xCF
#define PAGE_UP 0xC9 #define PAGE_DOWN 0xD1
/* Function's keys */
#define F1 0xBB
#define F2 0xBC
#define F3 0xBD
#define F4 0xBE
#define F5 0xBF
#define F6 0xC0
#define F7 0xC1
#define F8 0xC2
#define F9 0xC3
#define F10 0xC4
#define PLUS 0x2B
#define MINUS 0x2D
#define SPACEBAR 0x20 #define SHIFT_TAB 0x8F
#define CTRL_C 0x3
//struct time;
typedef struct tagEVENT{ int Msg;
int Posx, Posy; // toa xay bien co chuot struct time *t;
} EVENT;
typedef EVENT far *LPEVENT; // Khai bao cac ham toan cuc
extern void SetMouseRange(LPRECT);//LPRECT: xem SCREEN.H extern int InitMouse(LPRECT);
extern void ShowMouse(void); extern void HideMouse(void); extern void MouseRead(LPEVENT); extern LPEVENT GetEvent(void); extern void DeviceRelease(int);
//extern void ButtonPressed(int, LPEVENT); extern void ResetEvent(LPEVENT);
//extern void MoveMouse(int x,int y);//tri
extern void MouseText(int x,int y,int color1, int color2);//,char s[]);
(2)extern int GetMtx(); extern int GetMty();
//extern EVENT OldEvent(); extern int Double(LPEVENT); #endif
// End of MOUSE.H
IX.MODULE MOUSE.CPP #include <conio.h> #include <graphics.h> //#include <STDLIB.H> #include <COMPLEX.H>
#include "mouse.h"
void SetMouseRange(LPRECT lpRect) // Dat vung di chuyen cho chuot {
_AX = 0x07;//ham 07 cua ngat 33 de dinh gioi han di chuyen ngang _CX = lpRect->left;
_DX = lpRect->right;
geninterrupt(INT_MOUSE);//INT_MOUSE=0x33:ngat 33
_AX = 0x08;//ham 08 cua ngat 33 dinh gioi han di chuyen doc cho tro
_CX = lpRect->top; _DX = lpRect->bottom; geninterrupt(INT_MOUSE); }
// - int InitMouse(LPRECT lpRect)
// Khoi dong chuot {
int ax;
_AX = 0;
geninterrupt(INT_MOUSE); ax = _AX;
if (ax == 0) return FALSE;
SetMouseRange(lpRect); return TRUE;
}
// - void ShowMouse(void)
// Hien thi chuot {
_AX = 1;
geninterrupt(INT_MOUSE); }
// - void HideMouse(void)
// Dau chuot {
_AX = 2;
geninterrupt(INT_MOUSE); }
// - #include <CONIO.H>
#include <STDIO.H>
void MouseRead(LPEVENT lpEvent)
(3)int bx; _AX = 3;
geninterrupt(INT_MOUSE); bx = _BX;
//cx = _CX; //dx = _DX;
lpEvent->Msg = bx; lpEvent->Posx = _CX; lpEvent->Posy = _DX; gettime(lpEvent->t); }
// - void ResetEvent(LPEVENT lpEvent)
{
lpEvent->Msg = 0;
lpEvent->Posx = lpEvent->Posy = 0; }
// - EVENT PrevEvent, CurEvent;
// - LPEVENT GetEvent(void)
{
ResetEvent(&CurEvent); MouseRead(&CurEvent);
// chuyen sang toa ViewPort
CurEvent.Posx = CurEvent.Posx-MainWindow.rViewPort.left; CurEvent.Posy = CurEvent.Posy-MainWindow.rViewPort.top;
// xet trang thai chuot co thay doi hay khong
if((CurEvent.Posx!=PrevEvent.Posx)&&(CurEvent.Posy!=PrevEvent.Posy)) CurEvent.Msg |= M_CHANGE;
PrevEvent = CurEvent; // delay(50);
return (&CurEvent); }
// - void DeviceRelease(int Msg)
{
while(GetEvent()->Msg&Msg); }
// - int Double(LPEVENT lpEvent)
{
if(lpEvent->Msg==1) {
delay(100);
ResetEvent(lpEvent); lpEvent=GetEvent(); if(lpEvent->Msg==1)
//if((abs(CurEvent.Posx-oldEvent.Posx))<=10&&abs(CurEvent.Posy-oldEvent.Posy)<=10)
{ {
return 1; }
} else
return 0; }
else return 0; }
(4)void MouseText(int x,int y,int color1,int color2)//,char s[])//gia dau nhay tro
{
HideMouse();
// int h=textheight(s); int w=5;
int color=getcolor();
{
for(int i=0;i<10&&(!kbhit());i++) {
setcolor(color2);//WHITE); line(x,y,x+w,y);
line(x,y+1,x+w,y+1); delay(10);
setcolor(color); }
setcolor(color1);//GREEN); line(x,y,x+w,y);
line(x,y+1,x+w,y+1); setcolor(color);
for(i=0;i<10&&(!kbhit());i++) {
setcolor(color1);//GREEN); line(x,y,x+w,y);
line(x,y+1,x+w,y+1); delay(10);
setcolor(color); }
}while(!kbhit()); }
// - int GetMtx()
{
return getx(); }
// - int GetMty()
{
return gety(); }
// - // End of MOUSE.CPP
X.CLASS SCREEN.H
#if !defined( SCREEN_H ) #define SCREEN_H
#define BORDERSIZE
#define TRUE
#define FALSE
#define DEMODELAY
// Dinh nghia cac kieu du lieu typedef struct tagRECT{
int left, top, right, bottom ; }RECT;
typedef RECT far *LPRECT;
typedef struct tagWINDOW {
char sCaption[80]; /*Window's caption*/
(5)RECT rSys; /*System area of window*/ RECT rTitleBar; /*Caption area of window*/
RECT rMenuBar; /*Rectangle in which window's menu is located*/
RECT rMessage; /* Rectangle in which messages is display }WINDOWS;
// Dinh nghia cac ham va bien dung toan cuc
extern int Xc, Yc; // Goc toa
extern int LineColor; extern int VP_WIDTH; extern int VP_HEIGHT; extern WINDOWS MainWindow;
extern void InitGraphics(void); extern void OutMessage(char *Msg); extern void InitScreen(void);
extern void InitValues(char *lpCaption); extern int OutError(char *s);
#endif
// End of SCREEN.H
XI.MODULE SCREEN.CPP #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <graphics.h>
#include "screen.h" #include "mouse.h"
int T_SIZE, W_SIZE, H_SIZE, W_CHAR, H_CHAR, MSG_SIZE; int COLOR_WINDOW;
int COLOR_BUTTON; int COLOR_BORDER; int COLOR_CAPTION; int COLOR_TEXT; int VP_WIDTH; int VP_HEIGHT;
int Maxx, Maxy; // Maxx - Maxy of screen
WINDOWS MainWindow;
//int Xc, Yc; // Goc toa
//int LineColor = MAGENTA; // Mau cua duong thang can ve - Dung thu tuc SetPixel
// - void InitGraphics(void)
// Khoi tao che do hoa {
int grDrv=DETECT, grMode;
int ErrCode;
initgraph(&grDrv, &grMode, ""); ErrCode = graphresult();
if(ErrCode!= grOk) {
printf("Graphics error: %s\n", grapherrormsg(ErrCode)); printf("Press any key to halt ");
getch();
exit(1); /* return with error code */ }
(6){
LineColor = C; }
// - void SetPixel(int x, int y)
{
putpixel(Xc+x, Yc-y, LineColor); }
// - void Set2Pixel(int Ox, int Oy, int x, int y)
{
putpixel(Ox+x, Oy-y, LineColor); putpixel(Ox-x, Oy-y, LineColor); }
// - void Set2PixelHor(int Ox, int Oy, int x, int y)
{
putpixel(Ox+x, Oy-y, LineColor); putpixel(Ox+x, Oy+y, LineColor); }
// - void ClearViewPort(void)
{
struct fillsettingstype FillInfo;
// luu thong tin cu getfillsettings(&FillInfo);
setfillstyle(SOLID_FILL, COLOR_WINDOW); bar(0, 0, VP_WIDTH, VP_HEIGHT);
setfillstyle(FillInfo.pattern, FillInfo.color); DrawSysCoordinates();
} */
// End of SCREEN.C
// - #include <alloc.h>
int OutError(char *s) {
void far *buf;//con tro chi vung luu tru man hinh unsigned int size = imagesize(200,150,470,240); LPEVENT lpEvent;
int Cx1=280,Cy1=203,Cx2=337,Cy2=223; int Ox1=350,Oy1=203,Ox2=405,Oy2=223; if ((buf = farmalloc(size)) == NULL) {
return -1; }
else {
getimage(200,150,470,240,buf); }
setfillstyle(SOLID_FILL,BLUE); HideMouse();
bar(200,150,470,240); setcolor(WHITE);
rectangle(200,150,470,240);
outtextxy(200+(270-8*strlen(s))/2,170,s); setfillstyle(SOLID_FILL,LIGHTBLUE);
bar(Cx1,Cy1,Cx2,Cy2);//280,203,337,223); int OK=0;
outtextxy(285,210,"Cancel"); outtextxy(365,210,"OK"); int event;
(7){
lpEvent=GetEvent(); if(kbhit())
{
if((event=getch())==13) {
CompleteOk: HideMouse();
putimage(200,150,buf,COPY_PUT); ShowMouse();
farfree(buf); return OK; }
if(event==27) {
CompleteCancel: HideMouse();
putimage(200,150,buf,COPY_PUT); ShowMouse();
farfree(buf); return 0; }
if(event==9) {
OK=!OK; Cancel: if(OK==0) {
HideMouse();
setfillstyle(SOLID_FILL,BLUE);
bar(Ox1,Oy1,Ox2,Oy2);//350,203,405,223); outtextxy(365,210,"OK");
setfillstyle(SOLID_FILL,LIGHTBLUE); bar(Cx1,Cy1,Cx2,Cy2);//280,203,337,223); outtextxy(285,210,"Cancel");
ShowMouse(); }
Ok: if(OK==1) {
HideMouse();
setfillstyle(SOLID_FILL,BLUE);
bar(Cx1,Cy1,Cx2,Cy2);//280,203,337,223); outtextxy(285,210,"Cancel");
setfillstyle(SOLID_FILL,LIGHTBLUE); bar(Ox1,Oy1,Ox2,Oy2);//350,203,405,223); outtextxy(365,210,"OK");
ShowMouse(); }
}
if(event==0) {
event=getch(); if(event==75) {
OK=0;
goto Cancel; }
if(event==77) {