这一章节主要讲解了文本相关的一些编程

插入符的使用

	CreateSolidCaret(100,200);//插入符的宽度和高度
ShowCaret();

插入符的一般使用方法

int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1; // TODO: Add your specialized creation code here
//CreateSolidCaret(20,100);
//ShowCaret(); CClientDC dc(this);
//定义文本结构变量
TEXTMETRIC tm;
//获取设备描述表中的文本信息
dc.GetTextMetrics(&tm);
//根据文本大小创建合适的光标
CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmAveCharWidth); //实践下来这样显示的光标还是看上去不合理tm.tmAveCharWidth*2看上去还行
//显示光标
ShowCaret(); SetTimer(5,100,NULL);
return 0;
}

当窗口的大小发生变化时,显示窗口里的内容会消失,是由于OnDraw函数

void CTestView::OnDraw(CDC* pDC)
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CString str("VC++深入详解");
pDC->TextOut(50,50,str); CSize cz = pDC->GetTextExtent(str); str.LoadString(IDS_STRING61446);
pDC->TextOut(0,200,str);
//路径层
pDC->BeginPath();
pDC->Rectangle(50,50,50+cz.cx,50+cz.cy);
pDC->EndPath();
//裁剪区域
pDC->SelectClipPath(RGN_DIFF);
//绘制网格
for (int i = 0; i < 300; i+=10)
{
pDC->MoveTo(0,i);
pDC->LineTo(300,i);
pDC->MoveTo(i,0);
pDC->LineTo(i,300);
}
}

下面是关于字符输入的demo

void CTestView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
CFont font;
font.CreatePointFont(300,"华文行楷",NULL);
CFont *pOldFont = dc.SelectObject(&font);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
if(0x0d == nChar) //如果是回车键
{
m_strLine.Empty();
m_ptOrign.y += tm.tmHeight;
}
else if (0x08 == nChar)//如果是后退键
{
COLORREF clr = dc.SetTextColor(dc.GetBkColor()); //删除的实现方法:设置字符串颜色为窗体背景颜色
dc.TextOut(m_ptOrign.x,m_ptOrign.y,m_strLine); //输出字符串
m_strLine = m_strLine.Left(m_strLine.GetLength()-1); //去除字符串的末端字符
dc.SetTextColor(clr); //去除末端字符后颜色还原
}
else
{
m_strLine += nChar;
}
//光标跟随字符后面
CSize sz = dc.GetTextExtent(m_strLine);
CPoint pt;
pt.x = m_ptOrign.x + sz.cx;
pt.y = m_ptOrign.y;
SetCaretPos(pt);
dc.TextOut(m_ptOrign.x,m_ptOrign.y,m_strLine);
dc.SelectObject(pOldFont);
CView::OnChar(nChar, nRepCnt, nFlags);
}

定时器的应用,在onCreate函数里添加 SetTimer(1,100,NULL);

具体实现如下

void CTestView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
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_STRING61446);
dc.DrawText(str,rect,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);
}
CView::OnTimer(nIDEvent);
}

VC++深入详解-第五章学习心得的更多相关文章

  1. VC++深入详解-第四章学习心得

    这一章节主要讲解了 简单的绘图 主要是通过一些小的例子让我们学会了VC++的一些基本操作 void CDrawView::OnLButtonDown(UINT nFlags, CPoint point ...

  2. 孙鑫视频VC++深入详解学习笔记

    孙鑫视频VC++深入详解学习笔记 VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Le ...

  3. 弹性布局学习-详解flex-wrap(五)

    目录 弹性布局学习-介绍(一)  弹性布局学习-详解 flex-direction[决定主轴的方向](二) 弹性布局学习-详解 justify-content(三) 弹性布局学习-详解 align-i ...

  4. 前端技术之_CSS详解第五天

    前端技术之_CSS详解第五天 一.行高和字号 1.1 行高 CSS中,所有的行,都有行高.盒模型的padding,绝对不是直接作用在文字上的,而是作用在“行”上的. <!DOCTYPE html ...

  5. 开源项目MultiChoiceAdapter详解(五)——可扩展的MultiChoiceBaseAdapter

    上次写到了开源项目MultiChoiceAdapter详解(四)——MultiChoiceBaseAdapter的使用,其实我们仍旧可以不使用ActionMode的,所以这里就写一个自己扩展的方法. ...

  6. 《Linux内核设计与实现》课本第五章学习笔记——20135203齐岳

    <Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保 ...

  7. spring事务详解(五)总结提高

    系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.概念 ...

  8. Keepalived详解(五):Keepalived集群中MASTER和BACKUP角色选举策略【转】

    一.Keepalived集群中MASTER和BACKUP角色选举策略 在keepalived集群中,其实并没有严格意义上的主.备节点,虽然可以在keepalived配置文件中设置state选项为MAS ...

  9. 《Linux内核设计与实现》第五章学习笔记

    <Linux内核设计与实现>第五章学习笔记 姓名:王玮怡  学号:20135116 一.与内核通信     在Linux中,系统调用是用户空间访问内核的唯一手段:除异常和陷入外,它们是内核 ...

随机推荐

  1. MAC上使用maven打android的包,报错:No Android SDK path could be found. 解决办法

    对android工程运行mvn compile出现如下信息: No Android SDK path could be found. You may configure it in the pom u ...

  2. hdu 5727 Necklace 二分图匹配

    题目链接 给2*n个珠子, n<=9, n个阴n个阳. 然后将它们弄成一个环, 阴阳交替.现在给你m个关系, 每个关系给出a, b. 如果阳a和阴b挨着, 那么a就会变暗. 问你最小变暗几个阳. ...

  3. codeforces 659D . Bicycle Race 几何

    题目链接 对相邻的三个点叉积判断一下就好. #include <iostream> #include <vector> #include <cstdio> #inc ...

  4. 线程间使用socket通信的计算器

    该程序是处理平时的算数运算,程序也没有什么特别之处,只是将所有运算分开运算,每个函数(线程)处理不同的运算符号里面的运算,然后将所有结果都汇总到main函数中进行最后汇总(相加减)运算,每个函数内都处 ...

  5. latex列表

    枚举.列举和描述 \begin{list_type} \item The first item \item The second item \item The third etc \ldots\end ...

  6. Storm csdn

    blog.csdn.net/lonelytrooperblog.csdn.net/leytton http://my.oschina.net/apdplat/blog/308396

  7. otl库(以前不知道有这个库,并且还可以在Unix下使用)

    OTL介绍:OTL 是 Oracle, Odbc and DB2-CLI Template Library 的缩写,是一个C++编译中操控关系数据库的模板库,它目前几乎支持所有的当前各种主流数据库,例 ...

  8. 通过layer-list多图层叠加效果实现圆角功能

    在android的开发过程中,我们可能会做圆角的效果出来,如下图所示: 四个角都是圆角的效果.如果让UI设计人员直接出图,可能会更简单一些.但是我们使用android中layer-list多图层叠加效 ...

  9. append与after

    apend与apendTo就如同after与insertAfter,表达意思相同,表达不同.A.after(B)=B.insertAfter(A).apend在元素里面添加,after在元素外面添加. ...

  10. 2.&与&&以及位运算符。

    这是单独的一块,因为一条讲不清楚(虽然内容也不够一篇),而且我之前也没好好弄清楚,所以有必要写出来. 说位运算符也是从&与&&(|与||类似)之间的区别讲起的.事实上,对于两个 ...