Utilisation de clipping
Cette section contient un exemple de code qui montre comment générer un chemin d’accès clip composé d’une chaîne de caractères. L’exemple crée une police logique et l’utilise pour dessiner une chaîne dans un chemin d’élément, puis remplit le chemin en dessinant des lignes horizontales et verticales.
// 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
HRESULT hr;
size_t * pcch;
// 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.
hr = StringCchLength(lpsz, STRSAFE_MAX_CCH, pcch);
if (FAILED(hr))
{
// TODO: write error handler
}
nStrLen = *pcch
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;
}
Pour obtenir un exemple qui montre comment une application crée une région de découpage rectangulaire, consultez Régions.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour