Using Clipping

This section contains example code that shows how to generate a clip path consisting of a character string. The example creates a logical font and uses it to draw a string within a clip path, then fills the path by drawing horizontal and vertical lines.

/*

* DoClipPat - Draws a clip path using the specified string

* Return value - TRUE if successful; FALSE otherwise

* lplf - address of a LOGFONT structure that defines the font to

* use to draw the clip path

* lpsz - address of a string to use for the clip path

*/

BOOL DoClipPath(LPLOGFONT lplf, LPSTR lpsz)

{

LOGFONT lf; /* logical font structure */

HFONT hfont; /* new logical font handle */

HFONT hfontOld; /* original logical font handle */

HDC hdc; /* display DC handle */

int nXStart, nYStart; /* drawing coordinates */

RECT rc; /* rectangle structure for painting window */

SIZE sz; /* size structure that receives text extents */

int nStrLen; /* length of the string */

int i; /* loop counter */

/* Retrieve a cached DC for the window. */

hdc = GetDC(hwnd);

/* Erase the current window contents. */

GetClientRect(hwnd, &rc);

FillRect(hdc, &rc, GetStockObject(WHITE_BRUSH));

/*

* Use the specified font to create a logical font and select it

* into the DC.

*/

hfont = CreateFontIndirect(lplf);

if (hfont == NULL)

return FALSE;

hfontOld = SelectObject(hdc, hfont);

/* Create a clip path. */

nStrLen = lstrlen(lpsz);

BeginPath(hdc);

TextOut(hdc, nXStart, nYStart, lpsz, nStrLen);

EndPath(hdc);

SelectClipPath(hdc, RGN_DIFF);

/*

* Retrieve the dimensions of the rectangle surrounding

* the text.

*/

GetTextExtentPoint32(hdc, lpsz, nStrLen, &sz);

/* Draw horizontal lines through the clip path. */

for (i = nYStart + 1; i < (nYStart + sz.cy); i += 3) {

MoveToEx(hdc, nXStart, i, (LPPOINT) NULL);

LineTo(hdc, (nXStart + sz.cx), i);

}

/* Draw vertical lines through the clip path. */

for (i = nXStart + 1; i < (nXStart + sz.cx); i += 3){

MoveToEx(hdc, i, nYStart, (LPPOINT) NULL);

LineTo(hdc, i, (nYStart + sz.cy));

}

/* Select the original font into the DC and release the DC. */

SelectObject(hdc, hfontOld);

DeleteObject(hfont);

ReleaseDC(hwnd, hdc);

return TRUE;

}

For an example that demonstrates how an application creates a rectangular clipping region, see Regions.

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