Export (0) Print
Expand All

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  
        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 
        TextOut(hdc, nXStart, nYStart, lpsz, nStrLen); 
    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); 
    ReleaseDC(hwnd, hdc); 
    return TRUE; 

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



Community Additions

© 2015 Microsoft