📄 mytext.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 + -