五.文本编程

来源:互联网 发布:苹果手机关闭数据流量 编辑:程序博客网 时间:2024/05/02 01:12

1.创建文本插入符

CClientDC dc(this);

  TEXTMETRIC tm;

  dc.GetTextMetrics(&tm);

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

  ShowCaret();

2.创建图形插入符

bitmap.LoadBitmap(IDB_BITMAP1);

  CreateCaret(&bitmap);

这里bipmap要定声明在类的成员变量,不成声明成局部变量,因为oncreate函数数销毁时,会把局部变量销毁,所以看不到光标。

3.窗口的重绘

窗口发生重绘时就会调用OnDraw函数

      CString str("VC++学习笔记!");

  pDC->TextOut(50,50,str);

以上窗口重绘时输出一行文字。

 

加载一个在ResourceView中添加的string

str.LoadString(IDS_STRINGVC);

  pDC->TextOut(50,50,str);

4.裁剪区域

可以把它理解为一个绘图区域,其大小可以由我们来控制。通常可以把客户区看作一个大的裁剪区域。

SelectClipPath函数

该函数的作用是把当前设置的路径层和设备描述表中已遥裁剪区域按照一种指定的模式进行一个互操作。

SelectClipPath(int nMode)

nMode多种取值,

例如RGN_DIFF:新的裁剪区域包含当前裁剪区域,但排除当前路径层区域。

5.路径

路径层的概念就像当年军阀割剧时圈地那样,在地琙上划定了界线,界线之内的各自的地盘,别人不能侵犯。

MFC中,创建路径层是利用CDC类提供的BegingPathEndPath这两个函数来实现的,首先调用前者,该函数的作用是在设备描述表中打开一个路径层然后利用图形设备接口(GDI)提供的绘图函数进行绘图操作,例如绘制一些点、矩形、椭贺等;最后在绘图操作完成之后,应用程序通过调用EndPath函数关闭这个路径层。

CString str="VC++学习";

  pDC->TextOut(50,50,str);

  CSize sz=pDC->GetTextExtent(str);或取一个关于字符串范围的结构体。

  str.LoadString(IDS_STRINGVC);

  pDC->TextOut(0,200,str);

  pDC->BeginPath();

  pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);

  pDC->EndPath();

pDC->SelectClipPath(RGN_AND);

  for(int i=0;i<300;i+=10)

  {

     pDC->MoveTo(0,i);

     pDC->LineTo(300,i);

     pDC->MoveTo(i,0);

     pDC->LineTo(i,300);

  }

此处路径层对一个字符串看起来没有任何影响,如果把路径层注释掉,发面第一个字符串被覆盖掉了,这是因为系统默认提供了一个白色画刷,只接用Rectangle就会把原字符串覆盖。

6.字符输入

void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)

{

 

  CClientDC dc(this);

  TEXTMETRIC tm;

  dc.GetTextMetrics(&tm);

  if(nChar==0x0d)//如果WM_CHAR消息是回车

  {

     m_strLine.Empty();

     m_oldPoint.y+=tm.tmHeight;

  }

  else if(nChar==0x08)//如果WM_CHAR消息是退格

  {

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

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

     m_strLine=m_strLine.Left(m_strLine.GetLength()-1);

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

     dc.SetTextColor(clr);

  }

  else

  {

     m_strLine+=nChar;

  }

 

  CSize sz=dc.GetTextExtent(m_strLine);

  CPoint pt;

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

  pt.y=m_oldPoint.y;

  SetCaretPos(pt);//上面代码是重新设置插入符在所输入字符串的最后面。

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

  CView::OnChar(nChar, nRepCnt, nFlags);

 

}    

7.设置字体

      CFont font;//font有很多初始化函数数,这里只是其中一个

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

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

8.字体变色功能

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_STRINGVC);

  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);

  }

原创粉丝点击