void setHorzMouseRange ( int xmin, int xmax ) {
asm {
mov ax, 7 mov cx, xmin mov dx, xmax int 33h
}
}
void setVertMouseRange ( int ymin, int ymax ) {
asm {
mov ax, 8 mov cx, ymin mov dx, ymax int 33h
}
}
void setMouseShape ( const CursorShape& с ) {
#if defined(__COMPACT__) || defined(_LARGE__) || defined(__HUGE__) asm {
push es push di
les di, dwordptrc mov bx, es:[di+64] mov cx, es:[di+66] mov dx, di mov ax, 9 int 33h pop di pop es
}
#else
asm {
push di mov di, word ptr с mov bx, [di+64] mov cx, [di+66] mov dx, di mov ax, 9 int 33h pop di
}
#endif }
void hideMouseCursor ( const Rect& г ) {
#if defined(__COMPACT_J || defined(__LARGE_) || defined(_HUGE_) asm {
push es
Компьютерная графика. Полигональные модели
push si
push di
les di, dword ptr r
mov ax, 10h
mov cx, es:[di]
mov dx, es:[di+2]
mov si, es:[di+4]
mov di, es:[di+6]
int 33h
pop di
pop si
pop es
}
#else
asm {
push si
push di
mov di, word ptr r
mov ax, 10h
mov cx, [di]
mov dx, [di+2]
mov si, [di+4]
mov di, [di+6]
int 33h
pop di
pop si
}
#endif }
static void far mouseStub () {
asm {
push ds // preserve ds
push ax // preserve ax
mov ax, seg curHandler
mov ds, ax
pop ax // restore ax
push dx // y
push cx // x
push bx // button state
push ax // event mask
call curHandler
add sp, 8 // clear stack
pop ds
}
}
void setMouseHandler ( MouseHandler h, int mask ) {
void far * p = mouseStub; curHandler = h;
4. Работа с основными графическими устройствами
asm {
push es mov ax, OCh mov cx, mask les dx, p int 33h pop es
}
}
void removeMouseHandler () {
curHandler = NULL; asm {
mov ax, OCh mov cx, 0 int 33h
}
}
4.2.1. Инициализация и проверка наличия мыши Функция ге5е1.Мои5е производит инициализацию мыши и возвращает ненулевое значение, если мышь обнаружена.