MFC_文本框

本文介绍了MFC编程中插入符的创建与显示、路径层的概念及其创建方法,以及如何在View中实现文字输入等功能。涉及的技术包括CWnd类的使用、字体信息的获取、文字输出的处理等。

一.闪烁符

  CWnd::CreateSolidCaret 创建插入符

  ShowCaret()显示插入符。

  GetTextMetrics(),获得当前字体的一些信息。

  CWnd::CreateCaret()创建图象插入符

1 bitmap.LoadBitmap(IDB_BITMAP1);//此处的 bitmap 为成员变量! ! !
2 CreateCaret(&bitmap);
3 ShowCaret();
4 TEXTMETRIC tm;//字体结构体
5 dc.GetTextMetrics(&tm);//
6 m_ptOrigin.y+=tm.tmHeight;//获得字体高度

字符输入 CString::LoadString(ID 号) 比较方便

二.路径层的概念

    有以下两种方法创建路径层,作用:可以保护我们先前的文本或者图像不被后来画的覆盖

1)
pDC->BeginPath();
pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);
pDC->EndPath();
pDC->SelectClipPath(RGN_DIFF);
(2)
CSize sz=pDC->GetTextExtent(str);
CRgn rn;
rn.CreateRectRgn(0,50,sz.cx,sz.cy);
pDC->SelectClipRgn(&rn,RGN_DIFF)

三.在View输入文字的步骤

 1 CFont font;//创建字体对象
 2 font.CreatePointFont(300,"华文行楷",NULL);//设置
 3 CFont *pOldFont=dc.SelectObject(&font);//将字体选择到 DC 中
 4 TEXTMETRIC tm;//创建字体信息对象
 5 dc.GetTextMetrics(&tm);//获得当前字体信息
 6 if(0x0d==nChar)//处理回车键
 7 {
 8 m_strLine.Empty();
 9 m_ptOrigin.y+=tm.tmHeight;
10 }
11 else if(0x08==nChar)//处理退格键
12 {
13   COLORREF clr=dc.SetTextColor(dc.GetBkColor());//通过句柄获取背景色,设置文本颜色,保存到clr结构体中
14   dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);//输出字符
15   m_strLine=m_strLine.Left(m_strLine.GetLength()-1);
16   dc.SetTextColor(clr);//设置文本颜色
17 }
18 else
19 {
20   m_strLine+=nChar;
21 }
22 CSize sz=dc.GetTextExtent(m_strLine); CPoint pt;//处理光标的位置
23 pt.x=m_ptOrigin.x+sz.cx;
24 pt.y=m_ptOrigin.y; SetCaretPos(pt);
25 dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);//输出字体 dc.SelectObject(pOldFont);//原先的字体选择回去。

  卡拉ok字体程序

//DEL m_nWidth+=5;//此为 view 的成员变量,初始值为 0
//DEL
//DEL
//DEL CClientDC dc(this);//创建view句柄  
//DEL TEXTMETRIC tm;   //创建字体结构体
//DEL dc.GetTextMetrics(&tm);//获得文本字体,保存在tm中
//DEL CRect rect;    //创建一个矩形区域
//DEL rect.left=0; //设置区域大小左
//DEL rect.top=200;//设置区域顶部坐标
//DEL rect.right=m_nWidth;//设置区域长度量
//DEL rect.bottom=rect.top+tm.tmHeight;//此长方形的长度随着定时器的触发,逐渐增大,设置区域高度量
//DEL dc.SetTextColor(RGB(255,0,0));//通过句柄来设置文本颜色  
//DEL CString str;    //创建字符
//DEL str.LoadString(IDS_WEIXIN);//导入ID 号中的字符
//DEL dc.DrawText(str,rect,DT_LEFT);此函数的作用是将字符串输出到长方形中, 但如果字符串的长度超过长方形的长度,多余的字符将被截断
//DEL
//DEL rect.top=150;//在顶部为150处输入
//DEL rect.bottom=rect.top+tm.tmHeight;//高度获取
//DEL dc.DrawText(str,rect,DT_RIGHT);//
//DEL
//DEL CSize sz=dc.GetTextExtent(str);获得字符串的长度
//DEL if(m_nWidth>sz.cx)当长方形的长度大于字符串的长度后,将其重新归 0
//DEL {
//DEL m_nWidth=0;
//DEL dc.SetTextColor(RGB(0,255,0));
//DEL dc.TextOut(0,200,str);
//DEL }
//DEL
//DEL CView::OnTimer(nIDEvent);

 

转载于:https://www.cnblogs.com/Alimonky/p/5951851.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值