MFC文本输出及文本的效果设置

来源:互联网 发布:mac版本qq截图快捷键 编辑:程序博客网 时间:2024/06/10 01:14

《1》    创建插入符(在OnCreate函数中定义)

1、创建一般字处理程序插入符(利用CreateSolidCaret函数

CClientDCdc(this);

       TEXTMETRIC tm;

       dc.GetTextMetrics(&tm);//获取当前字体的信息

       CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);

//创建插入符,显示在窗口上

       ShowCaret();//显示插入符(若不加,插入符则不能显示)

2、创建图形插入符(利用CreateCaret函数)

bitmap.LoadBitmap(IDB_BITMAP1);

       CreateCaret(&bitmap);

       ShowCaret();//显示插入符(若不加,插入符则不能显示)

 

《2》    文本输出(利用CString类)

首先为了在窗口重绘后文字仍存在,应在OnDraw函数中进行处理

1//CString str("Hello!");//定义字符串变量并初始化

       CString str;

       str="Hello";

       pDC->TextOut(50,50,str);//第一个和第二个参数分别为x坐标和y坐标

2、利用字符串资源(利用LoadString函数)

CString str;

    str.LoadString(IDS_STRING129);//IDS_STRING129为文本的ID

    pDC->TextOut(20,80,str);//第一个和第二个参数分别为x坐标和y坐标

 

《3》    路径层

路径层主要运用于画图当中,其概念就像当年军阀割据时圈地一样,在地域上划定了界线,界线之内是各自的地盘,别人不能侵犯。VC++中利用CDC提供的BeginPathEndPath这两个函数来实现路径层。BeginPath()其作用是在设备描述表中打开一个路径层;然后利用图形设备接口提供的函数进行绘图操作,例如绘制一些点、椭圆等;最后,绘图操作完成之后,应用程序调用EndPath()这个函数关闭这个路径层

 

《4》 将输入的文本输出

在OnLButtonDown函数中

SetCaretPos(point); //设置插入符位置与鼠标点击点一样

    m_strLine.Empty();//将保存的对象(字符)清空

m_ptOrigin=point;//保存当前坐标

在OnChar函数中对消息进行响应:

CClientDCdc(this);

       CFont font;//创建字体

       font.CreatePointFont(300,"华文行楷",NULL);

//初始化字体,参数分别为字体大小、字体的名字、用于转换字体为逻辑单位

       CFont *pOldFont=dc.SelectObject(&font);

//将设置的字体选到设备描述中,返回先前的字体类型

       TEXTMETRIC tm;

       dc.GetTextMetrics(&tm);//求字体的高度

       if(0x0d==nChar)

       {

              m_strLine.Empty();

              m_ptOrigin.y+=tm.tmHeight;

       }

       else if(0x08==nChar)

       {

              COLORREF clr=dc.SetTextColor(dc.GetBkColor());

//GetBkColor作用是获取背景色,SetTextColor设置文本颜色,返回值为先前的文本颜色

              dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);

//输出字符串(此时文本颜色为背景色)

              m_strLine=m_strLine.Left(m_strLine.GetLength()-1);//Left函数作用为取左边的固定个数的字符;GetLength作用是得到保存的字符个数

              dc.SetTextColor(clr);//设置文本颜色为先前颜色

       }

       else

       {

              m_strLine+=(CHAR)nChar;

       }    

       //实现插入符随着输入位置移动

       CSize sz=dc.GetTextExtent(m_strLine);//获取当前字体的信息

       CPoint pt;

       pt.x=m_ptOrigin.x+sz.cx;

       pt.y=m_ptOrigin.y;

       SetCaretPos(pt);//设置插入符位置与pt一样

       dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);

       dc.SelectObject(pOldFont);//将原先的字体信息选回

引:可利用CEditViewCRichEditView

 

《5》实现卡拉OK式字幕变色效果(平滑的过渡变色,利用DrawText

1、设置定时器(利用SetTimer函数)

在OnCreate函数中:

SetTimer(1,100,NULL);//定义定时器

2、增加消息响应MW_TIMER,并在此函数中添加如下代码:

m_nWidth+=5;

       CClientDC dc(this);

       TEXTMETRIC tm;

       dc.GetTextMetrics(&tm);//获取字体信息

       CRect rect;//定义矩形

       rect.left=0;

       rect.top=200;

       rect.right=m_nWidth;

       rect.bottom=rect.top+tm.tmHeight;

       dc.SetTextColor(RGB(255,0,0));//改变文本颜色

       CString str;

       str.LoadString(IDS_STRING129);//获取文本

       dc.DrawText(str,rect,DT_LEFT);//输出文本

       CSize sz=dc.GetTextExtent(str);//获取字符串在屏幕显示的宽度

       if(m_nWidth>sz.cx)//超过字体宽度,重新从头开始输出

       {

              m_nWidth=0;

              dc.SetTextColor(RGB(0,255,0));

              dc.TextOut(0,200,str);

       }

原创粉丝点击