Quantcast
Channel: DirectWrite – codexpert blog
Viewing all articles
Browse latest Browse all 11

MFC Static Control Using Direct2D and DirectWrite (updated)

$
0
0

I have update the MFC static control presented in the previous articles by adding methods for setting text range color, typography and inline images.

Code samples

Setting text range color

void CDemoDlg::_DoDemo_Effects()
{
    m_staticDemo.Clear();

    const CString strTagRed = _T("RED");
    const CString strTagGreen = _T("GREEN");
    const CString strTagBlue = _T("BLUE");

    CString strText;
    strText.Format(_T("IDWriteTextLayout::SetDrawingEffect can change the color")
        _T(" of a text range as for example: \n\t%s\n\t%s\n\t%s"),
        strTagRed, strTagGreen, strTagBlue);

    m_staticDemo.SetText(strText);

    // set text range colors
    m_staticDemo.SetTextColor(strText.Find(strTagRed), strTagRed.GetLength(), RGB(255,0,0));
    m_staticDemo.SetTextColor(strText.Find(strTagGreen), strTagGreen.GetLength(), RGB(0, 255, 0));
    m_staticDemo.SetTextColor(strText.Find(strTagBlue), strTagBlue.GetLength(), RGB(0, 0, 255));
}

Setting text range typography

void CDemoDlg::_DoDemo_Typography()
{
    m_staticDemo.Clear();

    const CString strTagFontTypography = _T("Fancy Typography Rendering");

    CString strText;
    strText.Format(_T("Some OpenType fonts (e.g. Microsoft’s Gabriola) support %s"), 
        strTagFontTypography);

    m_staticDemo.SetText(strText);
    const UINT32 nStartPos = strText.Find(strTagFontTypography);
    const UINT32 nLength = strTagFontTypography.GetLength();

    // set an OpenType font which supports typography features
    m_staticDemo.SetFontFamilyName(nStartPos, nLength, _T("Gabriola"));
    // set feature
    m_staticDemo.SetFontTypography(nStartPos, nLength, DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7);
}

Setting inline images

void CDemoDlg::_DoDemo_InlineImages()
{
    m_staticDemo.Clear();

    const CString strTagImageRings = _T("[IMAGE:RINGS]");
    const CString strTagImageRose = _T("[IMAGE:ROSE]");
    const CString strTagImageDog = _T("[IMAGE:DOG]");

    CString strText;
    strText.Format(_T("Here are two rings %s a beautiful rose %s  and a little cute dog %s"),
        strTagImageRings, strTagImageRose, strTagImageDog);

    m_staticDemo.SetText(strText);

    // set inline images
    m_staticDemo.SetInlineImage(strText.Find(strTagImageRings), strTagImageRings.GetLength(), 
        _T("PNG"), IDB_PNG_RINGS);
    m_staticDemo.SetInlineImage(strText.Find(strTagImageRose), strTagImageRose.GetLength(), 
        _T("PNG"), IDB_PNG_ROSE);
    m_staticDemo.SetInlineImage(strText.Find(strTagImageDog), strTagImageDog.GetLength(), 
        _T("PNG"), IDB_PNG_DOG);
}

Demo application

Download: DirectWrite Static Control (updated).zip (613)

MFC DirectWrite Static Control

MFC DirectWrite Static Control

Resources

See also


Viewing all articles
Browse latest Browse all 11

Trending Articles