ExtractPenDataStrokes

2.0

Creates a new HPENDATA object that is a subset of an existing object.

int ExtractPenDataStrokes( HPENDATA hpndt, UINT fuExtract, LPARAM lParam, LPHPENDATA lphpndtNew, UINT gmemFlags )

Parameters

hpndt

Handle to an existing pen data object.

fuExtract

Extraction options and modifiers. This value can be a combination of one of the principal EPDS_ options, with an optional comparison modifier, if appropriate, and the optional EPDS_REMOVE modifier. The flags should be combined using the bitwise-OR operator.

The following table gives the principal options. These options specify what the new pen data object will be based on.

Constant
Description
EPDS_INKSET
Based on a handle to an inkset. The EPDS_GT, EPDS_GTE, EPDS_LT, and EPDS_LTE comparison operators are ignored, because extraction is based on matching the inkset. (However, EPDS_NOT creates a pen data set with all stroke/inkset intersections that do not match the provided inkset.)
EPDS_PENTIP
Based on complete pen-tip characteristics.
EPDS_SELECT
Based on selected strokes.
EPDS_STROKEINDEX
Based on index.
EPDS_TIPCOLOR
Based on pen-tip color.
EPDS_TIPWIDTH
Based on pen-tip width.
EPDS_TIPNIB
Based on pen tip nib style.
EPDS_USER
Based on user-specific value.
The following table gives the optional comparison modifiers and the optional removal modifier:
EPDS_LT
Less than comparison: extract all strokes with attribute less than the value specified in lParam.
EPDS_LTE
Less than or equal comparison: extract all strokes with attributes less than or equal to the value specified in lParam.
EPDS_GT
Greater than comparison: extract all strokes with attributes greater than the value specified in lParam.
EPDS_GTE
Greater than or equal comparison: extract all strokes with attributes greater than or equal to the value specified in lParam.
Constant
Description
EPDS_NOT
Negative comparison (alias EPDS_NE): extract all strokes with attributes not equal to the value specified by lParam. If combined with other EPDS_ constants, reverses the constant meaning (for example, EPDS_NE | EPDS_LT | EPDS_GT means not less than or not greater than). If lParam is EPDS_SELECT, EPDS_NOT means extract all unselected strokes.
EPDS_REMOVE
Remove matching strokes from source. If this flag is added, any strokes matching the criteria for extraction are removed from the source pen data.

lParam

Meaning is dependent on the value of the fuExtract parameter, as follows:

Constant
Description
EPDS_INKSET
lParam is a handle to an inkset.
EPDS_PENTIP
lParam is a pointer to a PENTIP structure to compare. Only equal or not-equal matches are supported. EPDS_LT, for example, is ignored.
EPDS_SELECT
lParam is not used and should be set to 0.
EPDS_STROKEINDEX
lParam is a zero-based stroke index to compare.
EPDS_TIPCOLOR
lParam is a pen tip color to compare.
EPDS_TIPNIB
lParam is a pen tip nib style to compare. Only equal or not-equal matches are supported.
EPDS_TIPWIDTH
lParam is a pen tip width to compare.
EPDS_USER
lParam is a user-specific value to compare, cast to a double-word value.

lphpndtNew

Address of a pen data handle if one is to be created; otherwise, NULL.

gmemFlags

Flag that specifies whether or not the Windows GlobalAlloc function should create a shared memory object when the pen data object is created. This should be either 0 or GMEM_DDESHARE. The GMEM_MOVEABLE and GMEM_ZEROINIT flags are added to this value, and other GMEM_ flags are ignored.

Return Value

Returns the number of strokes that match the comparison criteria if successful, or a negative error value. (The return value can be 0. The maximum is the largest integer value.) The error value can be one of the following:

Constant
Description
PDR_COMPRESSED
Pen data is compressed.
PDR_ERROR
Parameter or other unspecified error.
PDR_INKSETERR
Invalid inkset and EPDS_INKSET specified.
PDR_MEMERR
Memory error.
PDR_NA
Option not available.
PDR_PNDTERR
Invalid pendata.
PDR_STRKINDEXERR
Invalid stroke index.
PDR_USERDATAERR
EPDS_USER was specified but there is no per-stroke user data.
PDR_VERSIONERR
Could not convert old pendata.

Comments

ExtractPenDataStrokes
extracts strokes from an existing pen data object, optionally creating a new pen data object made up of the extracted strokes. The extraction can be a copy or move process; that is, the source pen data object can remain the same or contain only the remaining strokes not moved to the new structure. Modifier flags in fuExtract specify how the value in lParam compares with attributes of the pen data strokes (equal by default, greater than, less than, or none of these three).

If lphpndtNew is NULL, no pen data object is created. This is useful for modifying the original pen data object hpndt (when EPDS_REMOVE specified), or simply for determining a return value without modifying or creating a pen data object. If lphpndtNew is not NULL, the flags specified by gmemFlags are passed to the GlobalAlloc function when memory for the pen data memory block is created.

If EPDS_REMOVE is specified, any strokes with an attribute matching the comparison criteria are removed from the source pen data object, regardless of whether a new pen data is created. In the case of inksets, this may actually generate more strokes if there are multiple intersections with the inkset within any one stroke.

Example

To create an HPENDATA object consisting only of selected strokes:

ExtractPenDataStrokes( hpndt, EPDS_SELECT, 0, &hpndtDst, 0 );

To return the count of selected strokes:

ExtractPenDataStrokes( hpndt, EPDS_SELECT, 0, NULL, 0 );

To delete all but the selected strokes from the source:

ExtractPenDataStrokes( hpndt, EPDS_NOT | EPDS_SELECT | EPDS_REMOVE,

0, NULL, 0 );

To copy strokes 0 through 10 inclusive to a new HPENDATA object:

ExtractPenDataStrokes( hpndt, EPDS_LTE | EPDS_STROKE, 10,

&hpndtDst, 0 );

To move all but blue strokes to a separate HPENDATA object:

ExtractPenDataStrokes( hpndt, EPDS_NOT | EPDS_TIPCOLOR | EPDS_REMOVE,

RGB_BLUE, &hpndtDst, 0 );

See Also

DuplicatePenData

Software for developers
Delphi Components
.Net Components
Software for Android Developers
More information resources
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
Databases for Amazon shops developers
Amazon Categories Database
Browse Nodes Database