孙鑫VC++第5章文本编程
2012-09-11 23:00
169 查看
第五章、文本编程
1. 创建文本插入符
手动在视图类中添加WM_CREATE消息响应函数OnCreate函数,然后在里面添加;
CreateSolidCaret(20,100);//一个宽度,一个高度
ShowCaret();
2. 调用CDC类的GetTextMetrics成员函数可以得到设备描述表中的当前字体的度量信息;
CClientDC dc(this);
TEXTMETRIC tm;//定义文本信息结构体变量
dc.GetTextMetrics(&tm);//获取设备描述表中的文本信息
CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
ShowCaret();
3. 创建图形插入符
//CBitmapbitmap;//是一个局部变量,在OnCreate函数执行完后对象就要析构,应该把bitmap声明为视图类的成员变量;
bitmap.LoadBitmap(IDB_BITMAP1);
CreateCaret(&bitmap);
ShowCaret();
4. 窗口重绘
窗口大小改变的时候,窗口会发生重绘,窗口中已输入的文字或图形就会被擦除掉;
要想输入的内容始终保留在窗口上,就要在响应WM_PAINT消息中将内容再次输出。
MFC提供了一个OnDraw函数;
输出一串文字 TextOut函数
字符串类:CString,这个类没有基类;
CString str("VC++ 深入编程");
pDC->TextOut(50,50,str);
5. 利用字符串资源显示文本
str.LoadString(IDS_STRINGVC);
pDC->TextOut(0,200,str);
6. 路径
路径层就是在地域上划分了界限,界限之内就是各自地盘,别人不能侵犯;
MFC中用CDC类提供的BeginPath和EndPath这两个函数来实现的;
CSize 所占据的高度和宽度
GetTextExtent函数则是获得某个特定的字符串在窗口中显示时所占据的宽度和高度;
CSize sz =pDC->GetTextExtent(str);
pDC->BeginPath();
pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);
pDC->EndPath();
7. 路径层跟剪裁区域的互操作
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_DIFF);//CDC类提供的函数,把当前设置的路径层和设备描述表中已有的剪裁区域按照一种指定的模式进行一个互操作
for (int i=0; i < 300; i+=10)
{
pDC->MoveTo(0,i);
pDC->LineTo(300,i);
pDC->MoveTo(i,0);
pDC->LineTo(i,300);
}
8. 字符输入:WM_CHAR消息响应函数 OnChar函数中
CClientDCdc(this);
TEXTMETRICtm;
dc.GetTextMetrics(&tm);
if(0x0d== nChar) //回车
{
m_strLine.Empty();//清空字符串
m_ptOrigin.y+=tm.tmHeight;
}
elseif(0x08 == nChar)//退格
{
//获取背景颜色
COLORREFclr =dc.SetTextColor(dc.GetBkColor());
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
//Left函数删除一个字符
m_strLine= m_strLine.Left(m_strLine.GetLength()-1);
dc.SetTextColor(clr);
}
else
{
m_strLine+= nChar;
}
//让光标随着输入的字符移动
CSizesz = dc.GetTextExtent(m_strLine);
CPointpt;
pt.x= m_ptOrigin.x +sz.cx;
pt.y= m_ptOrigin.y;
SetCaretPos(pt);
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
9.设置字体
CFont font;
font.CreatePointFont(300,"华文行楷",NULL);//必须进行初始化,300指的是高度,最后面的参数指针是用来把指定的高度转换为逻辑单位,可以为空;
CFont*pOldFont = dc.SelectObject(&font);
dc.SelectObject(pOldFont);
MFC提供了专门的的字处理类:CEditView和CRichEditView两个类;
9. 字幕变色功能的实现
需要要用到:DrawText来实现;
需要定时器,SetTimer函数来设置;(在OnCreate函数中设置)
SetTimer(1,100,NULL);//非零标识,毫秒发送WM_TIMER消息,回调函数;
在WM_TIMER消息处理函数OnTimer函数中使用;
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);//DT_LEFT左对齐
//向右显示
rect.top = 150;
rect.bottom = rect.top +tm.tmHeight;
dc.DrawText(str,rect,DT_RIGHT);
//实现已经显示的文本变成绿色
CSize sz = dc.GetTextExtent(str);
if (m_nWidth >sz.cx)
{
m_nWidth = 0;
dc.SetTextColor(RGB(0,255,0));
dc.TextOut(0,200,str);
}
相关文章推荐
- 孙鑫VC++讲座笔记-(5)文本编程
- 孙鑫VC++讲座笔记-(5)文本编程
- 孙鑫VC++讲座笔记-(5)文本编程
- 孙鑫VC++讲座笔记-(5)文本编程
- Lesson5 文本编程 ---孙鑫VC++教程
- 孙鑫VC++讲座笔记-(5)文本编程
- [连载]VC++深入详解(孙鑫视频)第5章-文本编程 笔记
- MFC(文本编程,孙鑫C++第五讲笔记整理)
- VC++孙鑫-第三章-MFC AppWizard的原理与MFC程序框架-讲WIN32SDK和MFC编程的相同过程
- MFC文本编程——孙鑫第五课
- 孙鑫VC++视频学习笔记之5: VC菜单相关编程
- 孙鑫-MFC笔记四--文本编程
- 孙鑫VC学习笔记:第十二讲 介绍常量指针、指针常量,文本、二进制文件
- 孙鑫VC++讲座笔记-(6)菜单编程
- VC编程中如何设置对话框的背景颜色和静态文本颜色
- 孙鑫vc++ 第八课 笔记 对话框编程2
- VC编程读取文本数据
- 孙鑫VC视频教程笔记之第十四课“基于TCP和UDP的Socket编程”
- 孙鑫VC++视频学习笔记之7: 对话框编程(2)
- 孙鑫VC++讲座笔记(7) 对话框编程