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