Jump to content

GreSetCurrentPosition

From EDM2
Revision as of 16:10, 29 February 2020 by Ak120 (talk | contribs)

GreSetCurrentPosition sets the current (X,Y) position and resets the line type sequence.

This function must be supported by all presentation drivers. GreSetCurrentPosition is called by the function GpiSetCurrentPosition. GreSetCurrentPosition might be called in response to any of the Presentation Manager drawing functions, which end their operations by updating the current presentation space position.

Simulation support
None. This function is mandatory for all drivers.

Syntax

GreSetCurrentPosition(hdc, pptlPosition, pInstance, lFunction)

Parameters

hdc (HDC) - input
Device context handle.
pptlPosition (PPOINTL) - input
Pointer to new current position.
When COM_TRANSFORM is set, the current position is expressed in world coordinates. Otherwise, this value is passed in device coordinates. The handling routine must transform these values as appropriate. Typically, the presentation driver maintains the current position in both coordinate sets in the DC instance data structure.
pInstance (PVOID) - input
Pointer to instance data.
lFunction (ULONG) - input
High-order WORD=flags; low-order WORD=NGreSetCurrentPosition.

Returns

rc (BOOL) - returns
Return code.

On completion, the handling routine must return a BOOLEAN value to indicate success or an error.

  • TRUE Successful
  • FALSE Error

Possible Errors Detected: When an error is detected, the handling routine must call WinSetErrorInfo to post the condition. Error codes for conditions that the handling routine is expected to check include:

  • PMERR_BASE_ERROR
  • PMERR_COORDINATE_OVERFLOW
  • PMERR_DEV_FUNC_NOT_INSTALLED
  • PMERR_HDC_BUSY
  • PMERR_INV_COORD_SPACE
  • PMERR_INV_HDC
  • PMERR_INV_LENGTH_OR_COUNT
  • PMERR_PATH_LIMIT_EXCEEDED

Remarks

Typically, the handling routine also sets a flag in the DC instance data structure to indicate that the first pel of the next line must be drawn. When the COM_AREA or COM_PATH flag is set, this function is part of an area or path definition. In either case, the handling routine usually passes the call back to the graphics engine for processing by the default handling routine. The call would not be passed back to the graphics engine if the presentation driver had hooked all of the area and path functions.

When the current context is "in area," a figure closure line is generated (if necessary). This can cause a correlation hit to occur on an area boundary. The current position should only be correlated on, merged into the bounds, or both correlated and merged, if it is actually used in a drawing primitive.

The following is an example:

             ...
   GreSetCurrentPosition (hdc, p1);
             ...
             ...
             ...
   GreSetCurrentPosition (hdc, p2);
             ...
             ...
             ...
   GrePolyLine (hdc, to p3, n);
             ...

Notice that the sequence does not merge p1 into the bounds or correlate on it.