Windows 3.1 Device Drivers (ddag31qh.hlp) (Table of Contents; Topic list)
Cursor
                                                     Up Next Previous
────────────────────────────────────────────────────────────────────────────
 
The USER module requires all display drivers to provide cursor support. A
display driver must provide the following functions.
 
Function       Description
────────────────────────────────────────────────────────────────────────────
CheckCursor    Draws the cursor if drawing is not disabled.
 
InquireCursor  Retrieves information about the cursor.
 
MoveCursor     Moves the cursor to a specified position on the display.
 
SetCursor      Sets the cursor shape.
 
When Windows first starts, USER calls the InquireCursor function to retrieve
information about the cursor. It then sets a system timer to call the
CheckCursor function on each timer interrupt and enables the mouse driver,
allowing the Windows mouse-event routine to call MoveCursor at each mouse
interrupt occurrence. USER and Windows applications subsequently set the
shape of the cursor using SetCursor.
 
Because USER calls MoveCursor on each mouse interrupt, MoveCursor should set
a semaphore to prevent the function from being called before it can complete
the current call. The function should set the semaphore using a
noninterruptable instruction such as the xchg instruction. Once the
semaphore is set, MoveCursor should retrieve the x and y coordinates of the
current call, set a flag to indicate that the cursor is being redrawn, and
clear the semaphore. Whenever MoveCursor is called, it should check this
flag before continuing the request.
 
The CheckCursor function is called on each timer interrupt. The function
should determine whether the cursor needs redrawing and whether drawing is
enabled. If so, the function should redraw the cursor.
 
For displays that do not have hardware cursor, the display driver should
exclude the cursor from the screen before carrying out drawing operations in
functions such as BitBlt, Output, and ExtTextOut. The driver should check
the current x and y coordinates and exclude the cursor if any part of the
cursor lies within the drawing region as specified in the following.
 
Operation           Region
────────────────────────────────────────────────────────────────────────────
Bit-block transfer  Destination rectangle
 
Ellipse             Bounding rectangle
 
Other line drawing  Bounding rectangle
 
Polygon             Clip rectangle
 
Polyline            Clip rectangle
 
Scan line           Whole scan line
 
Text                Bounding rectangle and/or opaquing rectangle
 
 
                                      ♦