用双缓冲 处理文字
用双缓冲 处理文字 .
我在内存缓冲中 输出文字,
MemDC.TextOut(0,46,stemp);
但是最后显示不出来?
但是我在内存缓冲中画线就可以.
MemDC.MoveTo(0,0);
MemDC.LineTo(60,60);
我想在内存缓冲中写文字, 然后利用选取不同的区域,实现文字被切割的样子.
代码如下:
int nWidth,nHeight;
nWidth = 120;
nHeight = 120;
CFont m_fntArial;
CFont* pOldFont;
BOOL bSuccess;
BOOL bUnderline;
BOOL bItalic;
bUnderline = FALSE;
bItalic = FALSE;
RECT ScrollRect;
PAINTSTRUCT ps;
CDC* pDc = this-> BeginPaint(&ps);
pDc-> SetBkMode(TRANSPARENT);
CDC MemDC;
CPen NewPen, *pOldPen;
NewPen.CreatePen(PS_SOLID, 2, BLUE);
CString stemp;
//pDc-> SelectObject(m_pBrush[m_nBrushColor]);
CBrush bBrush(BLACK);
CBitmap MemBitmap;
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(pDc,100,60);
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
pOldPen = MemDC.SelectObject(&NewPen);
bSuccess = m_fntArial.CreateFont(NORMAL_TEXT_HEIGHT, 0, 0, 0,
FW_THIN, bItalic, bUnderline, 0,
ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
PROOF_QUALITY,
VARIABLE_PITCH ¦ 0x04 ¦ FF_DONTCARE,
(LPSTR) "Arial ");
MemDC.SetTextColor(NORMAL_TEXT_COLOR);
pOldFont = MemDC.SelectObject(&m_fntArial);
if (m_nPosition == 0)
{
if (m_nCurrLine < LINECOUNT)
{
ScrollRect.bottom = 15;
ScrollRect.left = 0;
ScrollRect.right = 100;
ScrollRect.top =0;
stemp = pArrCredit[m_nCurrLine];
MemDC.FillRect(&ScrollRect,&bBrush);
MemDC.DrawText((const char *)pArrCredit[m_nCurrLine],stemp.GetLength(),&ScrollRect,DT_TOP ¦DT_CENTER ¦
DT_NOPREFIX ¦ DT_SINGLELINE);
}
if ((m_nCurrLine + 1) < LINECOUNT)
{
ScrollRect.top = 16;
ScrollRect.bottom = 30;
stemp = pArrCredit[m_nCurrLine+1];
MemDC.FillRect(&ScrollRect,&bBrush);
MemDC.DrawText((const char *)pArrCredit[m_nCurrLine + 1],stemp.GetLength(),&ScrollRect,DT_TOP ¦DT_CENTER ¦
DT_NOPREFIX ¦ DT_SINGLELINE);
}
if ((m_nCurrLine + 2) < LINECOUNT)
{
ScrollRect.top = 31;
ScrollRect.bottom = 45;
stemp = pArrCredit[m_nCurrLine+2];
MemDC.FillRect(&ScrollRect,&bBrush);
MemDC.DrawText((const char *)pArrCredit[m_nCurrLine + 2],stemp.GetLength(),&ScrollRect,DT_TOP ¦DT_CENTER ¦
DT_NOPREFIX ¦ DT_SINGLELINE);
}
if ((m_nCurrLine + 3) < LINECOUNT)
{
ScrollRect.top = 46;
ScrollRect.bottom = 60;
stemp = pArrCredit[m_nCurrLine+3];
MemDC.FillRect(&ScrollRect,&bBrush);
MemDC.DrawText((const char *)pArrCredit[m_nCurrLine + 3],stemp.GetLength(),&ScrollRect,DT_TOP ¦DT_CENTER ¦
DT_NOPREFIX ¦ DT_SINGLELINE);
}
MemDC.SelectObject(pOldFont);
m_nPosition++;
}
ScrollRect.bottom = 15;
ScrollRect.left = 0;
ScrollRect.right = 100;
ScrollRect.top =0;
pDc-> FillRect(&ScrollRect,&bBrush);
ScrollRect.top = 20;
ScrollRect.bottom = 35;
pDc-> FillRect(&ScrollRect,&bBrush);
ScrollRect.top = 40;
ScrollRect.bottom = 55;
pDc-> FillRect(&ScrollRect,&bBrush);
pDc-> BitBlt(0,0,100,15,&MemDC,0,m_nPosition,SRCCOPY);
pDc-> BitBlt(0,20,100,15,&MemDC,0,m_nPosition+15,SRCCOPY);
pDc-> BitBlt(0,40,100,15,&MemDC,0,m_nPosition+30,SRCCOPY);
MemBitmap.DeleteObject();
MemDC.SelectObject(pOldPen);
MemDC.DeleteDC();
this-> EndPaint(&ps);
CDialog::OnPaint();
或者大家有没有什么别的好的实现方法啊?
我在内存缓冲中 输出文字,
MemDC.TextOut(0,46,stemp);
但是最后显示不出来?
但是我在内存缓冲中画线就可以.
MemDC.MoveTo(0,0);
MemDC.LineTo(60,60);
我想在内存缓冲中写文字, 然后利用选取不同的区域,实现文字被切割的样子.
代码如下:
int nWidth,nHeight;
nWidth = 120;
nHeight = 120;
CFont m_fntArial;
CFont* pOldFont;
BOOL bSuccess;
BOOL bUnderline;
BOOL bItalic;
bUnderline = FALSE;
bItalic = FALSE;
RECT ScrollRect;
PAINTSTRUCT ps;
CDC* pDc = this-> BeginPaint(&ps);
pDc-> SetBkMode(TRANSPARENT);
CDC MemDC;
CPen NewPen, *pOldPen;
NewPen.CreatePen(PS_SOLID, 2, BLUE);
CString stemp;
//pDc-> SelectObject(m_pBrush[m_nBrushColor]);
CBrush bBrush(BLACK);
CBitmap MemBitmap;
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(pDc,100,60);
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
pOldPen = MemDC.SelectObject(&NewPen);
bSuccess = m_fntArial.CreateFont(NORMAL_TEXT_HEIGHT, 0, 0, 0,
FW_THIN, bItalic, bUnderline, 0,
ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
PROOF_QUALITY,
VARIABLE_PITCH ¦ 0x04 ¦ FF_DONTCARE,
(LPSTR) "Arial ");
MemDC.SetTextColor(NORMAL_TEXT_COLOR);
pOldFont = MemDC.SelectObject(&m_fntArial);
if (m_nPosition == 0)
{
if (m_nCurrLine < LINECOUNT)
{
ScrollRect.bottom = 15;
ScrollRect.left = 0;
ScrollRect.right = 100;
ScrollRect.top =0;
stemp = pArrCredit[m_nCurrLine];
MemDC.FillRect(&ScrollRect,&bBrush);
MemDC.DrawText((const char *)pArrCredit[m_nCurrLine],stemp.GetLength(),&ScrollRect,DT_TOP ¦DT_CENTER ¦
DT_NOPREFIX ¦ DT_SINGLELINE);
}
if ((m_nCurrLine + 1) < LINECOUNT)
{
ScrollRect.top = 16;
ScrollRect.bottom = 30;
stemp = pArrCredit[m_nCurrLine+1];
MemDC.FillRect(&ScrollRect,&bBrush);
MemDC.DrawText((const char *)pArrCredit[m_nCurrLine + 1],stemp.GetLength(),&ScrollRect,DT_TOP ¦DT_CENTER ¦
DT_NOPREFIX ¦ DT_SINGLELINE);
}
if ((m_nCurrLine + 2) < LINECOUNT)
{
ScrollRect.top = 31;
ScrollRect.bottom = 45;
stemp = pArrCredit[m_nCurrLine+2];
MemDC.FillRect(&ScrollRect,&bBrush);
MemDC.DrawText((const char *)pArrCredit[m_nCurrLine + 2],stemp.GetLength(),&ScrollRect,DT_TOP ¦DT_CENTER ¦
DT_NOPREFIX ¦ DT_SINGLELINE);
}
if ((m_nCurrLine + 3) < LINECOUNT)
{
ScrollRect.top = 46;
ScrollRect.bottom = 60;
stemp = pArrCredit[m_nCurrLine+3];
MemDC.FillRect(&ScrollRect,&bBrush);
MemDC.DrawText((const char *)pArrCredit[m_nCurrLine + 3],stemp.GetLength(),&ScrollRect,DT_TOP ¦DT_CENTER ¦
DT_NOPREFIX ¦ DT_SINGLELINE);
}
MemDC.SelectObject(pOldFont);
m_nPosition++;
}
ScrollRect.bottom = 15;
ScrollRect.left = 0;
ScrollRect.right = 100;
ScrollRect.top =0;
pDc-> FillRect(&ScrollRect,&bBrush);
ScrollRect.top = 20;
ScrollRect.bottom = 35;
pDc-> FillRect(&ScrollRect,&bBrush);
ScrollRect.top = 40;
ScrollRect.bottom = 55;
pDc-> FillRect(&ScrollRect,&bBrush);
pDc-> BitBlt(0,0,100,15,&MemDC,0,m_nPosition,SRCCOPY);
pDc-> BitBlt(0,20,100,15,&MemDC,0,m_nPosition+15,SRCCOPY);
pDc-> BitBlt(0,40,100,15,&MemDC,0,m_nPosition+30,SRCCOPY);
MemBitmap.DeleteObject();
MemDC.SelectObject(pOldPen);
MemDC.DeleteDC();
this-> EndPaint(&ps);
CDialog::OnPaint();
或者大家有没有什么别的好的实现方法啊?
...全文
相关推荐
VC 绘制图形和文字(双缓冲)
完成图形绘制(椭圆,矩形,圆角矩形等),完成图形设置选项,状态栏随图形类型动态更新,利用双缓冲去闪烁,并用动态链接库实现文本居中显示。
VCGDI+图像+文字模拟图层
最近项目需要做类似的功能:双缓冲,图像绘制,添加文字,文字可以使用字体,可以拖拽文字块,模拟图层操作.有兴趣的朋友可以继续添加新功能.希望可以帮到忙.
VB制作文字拖尾动画.rar
VB制作文字拖尾动画,这个不但是适用文字拖尾,还可实现图像的拖尾,其实这是基于融合技术生成的蚕食特效,国外原作,主要是通过DX模板缓冲技术生成,3D的动态变幻效果,本代码属于简单型。
文字滚动VC++实现
本程序实现了文字滚动,并且改变字体,字的颜色。
MFC 文字跟随鼠标移动
MFC中实现文字可以跟随鼠标任意移动的功能。


界面
