小弟我做了一个仪表盘程序,小弟我只想改其中一个地方的字体背景颜色,该如何改呢
我做了一个仪表盘程序,我只想改其中一个地方的字体背景颜色,该怎么改呢?
我做了一个仪表盘程序,其中有四行文字,我只想改其中一个地方(假如是其中某一行)的字体的背景颜色,该怎么改呢?
部分代码如下:
void CMeter::DrawValue(CDC *pDC)
{ double dValue = m_dCurrentValue;//指针刻度值
double iValue = 1000*dValue;//显示值
int nHeight;
CPoint pttemp;
CString strtemp;
CFont *pFontOld;
COLORREF clr1;
clr1=RGB(255,0,0);//字体背景颜色
// 数值显示
nHeight = m_nRadiusFrame/5;
pttemp = m_rectValue.CenterPoint();
strtemp.Format("%.*lf", m_nValueDecimals, iValue);
m_font.DeleteObject() ;
m_font.CreateFont (nHeight, 0, 0, 0, 400,
FALSE, FALSE, 0, ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH|FF_SWISS, "Arial") ;
pFontOld = pDC->SelectObject(&m_font);
pDC->SetBkColor(clr1);//字体的背景颜色(如果这样的话,四行文字的背景颜色都变成红色的了)
pDC->SetTextAlign(TA_TOP|TA_CENTER);
//pDC->TextOut(pttemp.x, pttemp.y, m_strUnits);//
pDC->TextOut(pttemp.x, pttemp.y-20, m_strUnits1);//将字符串按指定的坐标显示出来(第一行文字)
pDC->TextOut(pttemp.x, pttemp.y-3, m_strUnits2);//第二行文字
pDC->TextOut(pttemp.x, pttemp.y+14, m_strUnits3);//第三行文字
pDC->TextOut(pttemp.x+60, pttemp.y+nHeight+10, strtemp);//将显示值按指定的坐标显示出来(第四行文字)
}
------解决方案--------------------
计算文字区域,用背景色填充文字区域,再画文字到上面
------解决方案--------------------
pDC->SetBkColor(clr1);//字体的背景颜色(如果这样的话,四行文字的背景颜色都变成红色的了)
pDC->SetTextAlign(TA_TOP|TA_CENTER);
//pDC->TextOut(pttemp.x, pttemp.y, m_strUnits);//
pDC->TextOut(pttemp.x, pttemp.y-20, m_strUnits1);//将字符串按指定的坐标显示出来(第一行文字)
clr1=RGB(0,255,0);//字体背景颜色
pDC->SetBkColor(clr1);//
pDC->TextOut(pttemp.x, pttemp.y-3, m_strUnits2);//第二行文字
clr1=RGB(0,0,255);//字体背景颜色
pDC->SetBkColor(clr1);//
pDC->TextOut(pttemp.x, pttemp.y+14, m_strUnits3);//第三行文字
这样行不?
------解决方案--------------------
你多创建几个CFont对象,试试看啊!
我做了一个仪表盘程序,其中有四行文字,我只想改其中一个地方(假如是其中某一行)的字体的背景颜色,该怎么改呢?
部分代码如下:
void CMeter::DrawValue(CDC *pDC)
{ double dValue = m_dCurrentValue;//指针刻度值
double iValue = 1000*dValue;//显示值
int nHeight;
CPoint pttemp;
CString strtemp;
CFont *pFontOld;
COLORREF clr1;
clr1=RGB(255,0,0);//字体背景颜色
// 数值显示
nHeight = m_nRadiusFrame/5;
pttemp = m_rectValue.CenterPoint();
strtemp.Format("%.*lf", m_nValueDecimals, iValue);
m_font.DeleteObject() ;
m_font.CreateFont (nHeight, 0, 0, 0, 400,
FALSE, FALSE, 0, ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH|FF_SWISS, "Arial") ;
pFontOld = pDC->SelectObject(&m_font);
pDC->SetBkColor(clr1);//字体的背景颜色(如果这样的话,四行文字的背景颜色都变成红色的了)
pDC->SetTextAlign(TA_TOP|TA_CENTER);
//pDC->TextOut(pttemp.x, pttemp.y, m_strUnits);//
pDC->TextOut(pttemp.x, pttemp.y-20, m_strUnits1);//将字符串按指定的坐标显示出来(第一行文字)
pDC->TextOut(pttemp.x, pttemp.y-3, m_strUnits2);//第二行文字
pDC->TextOut(pttemp.x, pttemp.y+14, m_strUnits3);//第三行文字
pDC->TextOut(pttemp.x+60, pttemp.y+nHeight+10, strtemp);//将显示值按指定的坐标显示出来(第四行文字)
}
------解决方案--------------------
计算文字区域,用背景色填充文字区域,再画文字到上面
------解决方案--------------------
pDC->SetBkColor(clr1);//字体的背景颜色(如果这样的话,四行文字的背景颜色都变成红色的了)
pDC->SetTextAlign(TA_TOP|TA_CENTER);
//pDC->TextOut(pttemp.x, pttemp.y, m_strUnits);//
pDC->TextOut(pttemp.x, pttemp.y-20, m_strUnits1);//将字符串按指定的坐标显示出来(第一行文字)
clr1=RGB(0,255,0);//字体背景颜色
pDC->SetBkColor(clr1);//
pDC->TextOut(pttemp.x, pttemp.y-3, m_strUnits2);//第二行文字
clr1=RGB(0,0,255);//字体背景颜色
pDC->SetBkColor(clr1);//
pDC->TextOut(pttemp.x, pttemp.y+14, m_strUnits3);//第三行文字
这样行不?
------解决方案--------------------
你多创建几个CFont对象,试试看啊!