⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mytext.cpp

📁 PC游戏编程相关,有关嵌入式与网络通讯
💻 CPP
字号:
// 自定义格式化文本代码
// 作者: Janhail Luo
// 最后整理: 2003-03-03
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "CFT.h"
#include "MyText.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMyText::CMyText()
{
    pDc = 0;
    lPosX = 0;
    lPosY = 0;
}

CMyText::~CMyText()
{
}

void CMyText::SetStartPos(long x, long y)
{
    lPosX = x;
    lPosY = y;
}

void CMyText::OnVisitBefore(int iType, int iDepth,
              CCFTAnalyser::SItem* pItem, void* pParam)
{
    pDc = (CPaintDC*)pParam;
    switch (iType)
    {
    case 1:
        if (pItem->strName=="font"
            || pItem->strName=="i"
            || pItem->strName=="b" )
        {
            SItemInfo item;
            item.pFont = new CFont;
            if (fontStack.size()==0)
            {
                item.colorText = 0;
                item.nFontSize = 12;
                item.nWeight = FW_NORMAL;
                item.bItalic = FALSE;
                item.bUnderline = FALSE;
            }else
            {
                item.colorText = fontStack.top().colorText;
                item.nFontSize = fontStack.top().nFontSize;
                item.nWeight = fontStack.top().nWeight;
                item.bItalic = fontStack.top().bItalic;
                item.bUnderline = fontStack.top().bUnderline;
            }
            if (pItem->strName=="i")
            {
                item.bItalic = TRUE;
            }else if (pItem->strName=="b")
            {
                item.nWeight = FW_BOLD;
            }else
            {
                long n;
                char* stop;
                if (pItem->listParm.find("color")
                        !=pItem->listParm.end())
                {
                    const char* color = pItem->listParm["color"];
                    if (strcmp(color, "red")==0)
                    {
                        item.colorText = RGB(255, 0, 0);
                    }else if (strcmp(color, "blue")==0)
                    {
                        item.colorText = RGB(0, 0, 255);
                    }else
                    {
                        n = strtol(color, &stop, 16);
                        item.colorText = RGB(
                            (n&0x0FF0000)>>16,
                            (n&0x0FF00)>>8,
                            n&0x0FF);
                    }
                }
                if (pItem->listParm.find("size")
                        !=pItem->listParm.end())
                {
                    n = strtol(pItem->listParm["size"], &stop, 10);
                    item.nFontSize = n;
                }
            }

            VERIFY(item.pFont->CreateFont(
               item.nFontSize,            // nHeight
               0,                         // nWidth
               0,                         // nEscapement
               0,                         // nOrientation
               item.nWeight,              // nWeight
               item.bItalic,              // bItalic
               item.bUnderline,           // bUnderline
               0,                         // cStrikeOut
               DEFAULT_CHARSET,           // nCharSet
               OUT_DEFAULT_PRECIS,        // nOutPrecision
               CLIP_DEFAULT_PRECIS,       // nClipPrecision
               DEFAULT_QUALITY,           // nQuality
               DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
               "Arial"));                 // lpszFacename

            pDc->SetTextColor(item.colorText);
            item.pOldFont = pDc->SelectObject(item.pFont);
            fontStack.push(item);
        }
        break;
    }
    CCFTAnalyser::OnVisitBefore(iType, iDepth, pItem, pParam);
}

void CMyText::OnVisit(int iType, int iDepth, CCFTAnalyser::SItem* pItem, void* pParam)
{
    CSize textSize;
    pDc = (CPaintDC*)pParam;
    switch (iType)
    {
    case 1:
        pDc->TextOut(lPosX, lPosY, pItem->strName);
        textSize = pDc->TabbedTextOut(lPosX, lPosY, pItem->strName, 0, 0, 0);
        lPosX += textSize.cx;
        break;
    }
    CCFTAnalyser::OnVisit(iType, iDepth, pItem, pParam);
}

void CMyText::OnVisitAfter(int iType, int iDepth,
              CCFTAnalyser::SItem* pItem, void* pParam)
{
    pDc = (CPaintDC*)pParam;
    switch (iType)
    {
    case 1:
        if (pItem->strName=="font"
            || pItem->strName=="i"
            || pItem->strName=="b" )
        {
            pDc->SelectObject(fontStack.top().pOldFont);
            fontStack.top().pFont->DeleteObject();
            delete fontStack.top().pFont;
            fontStack.pop();
        }
        break;
    }
    CCFTAnalyser::OnVisitAfter(iType, iDepth, pItem, pParam);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -