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