代码如下:
#include <dos.h>
#include "mouse.h"
#include "macro.h"
#include <graphics.h>
void reset_driver_and_read_status(void)
{
union REGS inregs, outregs;
inregs.x.ax = 0x0000;
int86(0x33, &inregs, &outregs);
}
void show_mouse_cursor(void)
{
union REGS inregs, outregs;
MSCURS arrow = {
0x3fff, 0x1fff, 0x0fff, 0x07ff,
0x03ff, 0x01ff, 0x00ff, 0x007f,
0x003f, 0x00ff, 0x01ff, 0x10ff,
0x30ff, 0xf87f, 0xf87f, 0xfc3f,
0x0000, 0x4000, 0x6000, 0x7000,
0x7800, 0x7c00, 0x7e00, 0x7f00,
0x7f80, 0x7e00, 0x7c00, 0x4600,
0x0600, 0x0300, 0x0300, 0x0180, 0, 0};
inregs.x.ax = 0x0001;
define_graphics_cursor(arrow);
int86(0x33, &inregs, &outregs);
}
void hide_mouse_cursor(void)
{
union REGS inregs, outregs;
inregs.x.ax = 0x0002;
int86(0x33, &inregs, &outregs);
}
void return_position_and_button_status(int *button_status, int *column, int *row)
{
union REGS inregs, outregs;
inregs.x.ax = 0x0003;
int86(0x33, &inregs, &outregs);
*button_status = outregs.x.bx;
*column = outregs.x.cx;
*row = outregs.x.dx;
}
void position_mouse_cursor(int column, int row)
{
union REGS inregs, outregs;
inregs.x.ax = 0x0004;
inregs.x.cx = column;
inregs.x.dx = row;
int86(0x33, &inregs, &outregs);
}
void define_horizontal_cursor_range(int minimum_column, int maximum_column)
{
union REGS inregs, outregs;
inregs.x.ax = 0x0007;
inregs.x.cx = minimum_column;
inregs.x.dx = maximum_column;
int86(0x33, &inregs, &outregs);
}
void define_vertical_cursor_range(int minimum_row, int maximum_row)
{
union REGS inregs, outregs;
inregs.x.ax = 0x0008;
inregs.x.cx = minimum_row;
inregs.x.dx = maximum_row;
int86(0x33, &inregs, &outregs);
}
void define_graphics_cursor(MSCURS bitmap_mask)
{
union REGS inregs, outregs;
struct SREGS segregs;
inregs.x.ax = 0x0009;
inregs.x.bx = bitmap_mask.hot_spot_column;
inregs.x.cx = bitmap_mask.hot_spot_row;
inregs.x.dx = FP_OFF(&bitmap_mask);
segregs.es = FP_SEG(&bitmap_mask);
int86x(0x33, &inregs, &outregs, &segregs);
}
请问显示不了的原因以及如何改进
#include <dos.h>
#include "mouse.h"
#include "macro.h"
#include <graphics.h>
void reset_driver_and_read_status(void)
{
union REGS inregs, outregs;
inregs.x.ax = 0x0000;
int86(0x33, &inregs, &outregs);
}
void show_mouse_cursor(void)
{
union REGS inregs, outregs;
MSCURS arrow = {
0x3fff, 0x1fff, 0x0fff, 0x07ff,
0x03ff, 0x01ff, 0x00ff, 0x007f,
0x003f, 0x00ff, 0x01ff, 0x10ff,
0x30ff, 0xf87f, 0xf87f, 0xfc3f,
0x0000, 0x4000, 0x6000, 0x7000,
0x7800, 0x7c00, 0x7e00, 0x7f00,
0x7f80, 0x7e00, 0x7c00, 0x4600,
0x0600, 0x0300, 0x0300, 0x0180, 0, 0};
inregs.x.ax = 0x0001;
define_graphics_cursor(arrow);
int86(0x33, &inregs, &outregs);
}
void hide_mouse_cursor(void)
{
union REGS inregs, outregs;
inregs.x.ax = 0x0002;
int86(0x33, &inregs, &outregs);
}
void return_position_and_button_status(int *button_status, int *column, int *row)
{
union REGS inregs, outregs;
inregs.x.ax = 0x0003;
int86(0x33, &inregs, &outregs);
*button_status = outregs.x.bx;
*column = outregs.x.cx;
*row = outregs.x.dx;
}
void position_mouse_cursor(int column, int row)
{
union REGS inregs, outregs;
inregs.x.ax = 0x0004;
inregs.x.cx = column;
inregs.x.dx = row;
int86(0x33, &inregs, &outregs);
}
void define_horizontal_cursor_range(int minimum_column, int maximum_column)
{
union REGS inregs, outregs;
inregs.x.ax = 0x0007;
inregs.x.cx = minimum_column;
inregs.x.dx = maximum_column;
int86(0x33, &inregs, &outregs);
}
void define_vertical_cursor_range(int minimum_row, int maximum_row)
{
union REGS inregs, outregs;
inregs.x.ax = 0x0008;
inregs.x.cx = minimum_row;
inregs.x.dx = maximum_row;
int86(0x33, &inregs, &outregs);
}
void define_graphics_cursor(MSCURS bitmap_mask)
{
union REGS inregs, outregs;
struct SREGS segregs;
inregs.x.ax = 0x0009;
inregs.x.bx = bitmap_mask.hot_spot_column;
inregs.x.cx = bitmap_mask.hot_spot_row;
inregs.x.dx = FP_OFF(&bitmap_mask);
segregs.es = FP_SEG(&bitmap_mask);
int86x(0x33, &inregs, &outregs, &segregs);
}
请问显示不了的原因以及如何改进
