VC++学习(5)——文本编程,插入符的初始化,图形插入符;文字始终在窗口;字符输入功能,回车换行,删除,左键定位;字体修改,字体平滑变色

本文主要是介绍VC++学习(5)——文本编程,插入符的初始化,图形插入符;文字始终在窗口;字符输入功能,回车换行,删除,左键定位;字体修改,字体平滑变色,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

目录

  • 引出
  • 第五讲 文本编程
    • 新建项目
    • 输入线的初始化
    • 根据字体大小定义插入符大小
    • 创建图形插入符
    • 文字始终保存在窗口中
      • CString类
      • 通过字符串资源
    • 路径层
    • 字符输入的功能
      • 键盘输入消息
      • 鼠标左键消息
        • 保存点击位置的坐标
      • 输入回车键的处理
      • 删除文字的实现
    • 字符输入功能代码
    • 字体的修改
    • 模拟卡拉ok变色字体
  • 总结
  • 第四讲 简单绘图
      • 加入点击弹窗
    • 划线的实现1
    • 划线实现2
    • 划线的实现3,CClient
      • GetParent()
    • 划线的实现4
    • 不同的颜色画笔
    • 不同颜色画刷
    • 位图
    • 空的矩形
    • 画笔实现
    • 画个扇形

引出

VC++学习(5)——文本编程,插入符的初始化,图形插入符;文字始终在窗口;字符输入功能,回车换行,删除,左键定位;字体修改,字体平滑变色


第五讲 文本编程

新建项目

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入线的初始化

输入的竖直线,一闪一闪的输入

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

增加Windows消息处理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据字体大小定义插入符大小

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{if (CView::OnCreate(lpCreateStruct) == -1)return -1;// TODO: Add your specialized creation code here// 确定符号大小CClientDC dc(this); // 当前设备描述表describeTEXTMETRIC tm;dc.GetTextMetrics(&tm); // 取地址符// 创建一个插入符号CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);ShowCaret(); // 显示出来return 0;
}

创建图形插入符

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

文字始终保存在窗口中

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

CString类

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

/
// CTextView drawingvoid CTextView::OnDraw(CDC* pDC)
{CTextDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data here// CStringCString str("pet");pDC->TextOut(50,50,str);}

通过字符串资源

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

/
// CTextView drawingvoid CTextView::OnDraw(CDC* pDC)
{CTextDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data here// CStringCString str("pet");pDC->TextOut(50,50,str);// 使用字符串资源str.LoadString(IDS_PET);pDC->TextOut(0,200,str);}

路径层

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

字符输入的功能

键盘输入消息

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

鼠标左键消息

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void CTextView::OnLButtonDown(UINT nFlags, CPoint point) 
{// TODO: Add your message handler code here and/or call default// 移动插入符到这里SetCaretPos(point);m_strLine.Empty(); // 将cstring中保存的内容情空CView::OnLButtonDown(nFlags, point);
}
保存点击位置的坐标

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入回车键的处理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

删除文字的实现

将文本的颜色设置成和背景色一样

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

字符输入功能代码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.鼠标左键定位插入字符位置;

2.特殊字符的处理,回车键,删除键;

3.光标随着输入的字符移动;

void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{// TODO: Add your message handler code here and/or call default// 字体的高度CClientDC dc(this);TEXTMETRIC tm;dc.GetTextMetrics(&tm);printf("%u\n", nChar);if(0x0d==nChar) // 输入的是回车{m_strLine.Empty(); // 清空m_ptOrig.y += tm.tmHeight; // 到下一行}else if(0x08==nChar) // 输入的是删除{// 获取背景色,文本颜色设置成背景色COLORREF clr = dc.SetTextColor(dc.GetBkColor());// 然后输出dc.TextOut(m_ptOrig.x,m_ptOrig.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_ptOrig.x + sz.cx;pt.y = m_ptOrig.y;SetCaretPos(pt);dc.TextOut(m_ptOrig.x,m_ptOrig.y,m_strLine);CView::OnChar(nChar, nRepCnt, nFlags);
}void CTextView::OnLButtonDown(UINT nFlags, CPoint point) 
{// TODO: Add your message handler code here and/or call default// 移动插入符到这里SetCaretPos(point);m_strLine.Empty(); // 将cstring中保存的内容情空m_ptOrig = point;  // 保存坐标值CView::OnLButtonDown(nFlags, point);
}

字体的修改

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

vc++6.0中的字体

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Windows系统中的字体

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

	// 定义字体CFont font;font.CreatePointFont(300, "华文行楷", NULL);CFont *pOldFont = dc.SelectObject(&font);

模拟卡拉ok变色字体

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void CTextView::OnTimer(UINT nIDEvent) 
{// TODO: Add your message handler code here and/or call default// 显示大小按5个像素增加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_PET);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++学习(5)——文本编程,插入符的初始化,图形插入符;文字始终在窗口;字符输入功能,回车换行,删除,左键定位;字体修改,字体平滑变色


其他

第四讲 简单绘图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

加入点击弹窗

框架类CMainFrame中加入不生效,需要在CDrawView中加入

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

编写代码,加入一个消息框

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在头文件中,自动加入了注释宏

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

源文件中加入了宏,加入了消息响应函数的宏

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

划线的实现1

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

鼠标的抬起与放下的事件定义

/
// CDrawView message handlersvoid CDrawView::OnLButtonDown(UINT nFlags, CPoint point) 
{// TODO: Add your message handler code here and/or call default// 点击的时候,拿到了点m_ptOrigin=point; // 获取起点// MessageBox("view click");CView::OnLButtonDown(nFlags, point);
}void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) 
{// TODO: Add your message handler code here and/or call defaultHDC hdc; hdc=::GetDC(m_hWnd);// 起点MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);// 划线LineTo(hdc,point.x,point.y);// 释放dc::ReleaseDC(m_hWnd,hdc);CView::OnLButtonUp(nFlags, point);
}

划线实现2

用cdc实现

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

划线的实现3,CClient

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GetParent()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

划线的实现4

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

	CWindowDC dc(GetParent());dc.MoveTo(m_ptOrigin);dc.LineTo(point);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不同的颜色画笔

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

	// 创建画笔CPen pen(PS_DOT,1,RGB(255,0,0));CClientDC dc(this);CPen *pOldPen=dc.SelectObject(&pen);dc.MoveTo(m_ptOrigin);dc.LineTo(point);dc.SelectObject(pOldPen); // 先前的画笔选择回设备描述表

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不同颜色画刷

	// 创建画刷CBrush brush(RGB(255,0,0)); CClientDC dc(this);dc.FillRect(CRect(m_ptOrigin,point),&brush);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

位图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

	CBitmap bitmap;bitmap.LoadBitmap(IDB_BITMAP1);CBrush brush(&bitmap);CClientDC dc(this);dc.FillRect(CRect(m_ptOrigin,point),&brush);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

空的矩形

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

画笔实现

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

构造函数初始化为false

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

鼠标按下时,设置为真,True

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

鼠标抬起,设置为false

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

画出连续的线条

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 
{// TODO: Add your message handler code here and/or call default// 判断鼠标状态CClientDC dc(this);if(m_bDraw==TRUE){// 开始划线dc.MoveTo(m_ptOrigin);dc.LineTo(point);m_ptOrigin=point; // 终点设置为起点}CView::OnMouseMove(nFlags, point);
}

换个红色的画笔

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 
{// TODO: Add your message handler code here and/or call defaultCClientDC dc(this);// 换个颜色CPen pen(PS_SOLID,1,RGB(255,0,0));CPen *pOldPen=dc.SelectObject(&pen); // 之前的画笔// 判断鼠标状态if(m_bDraw==TRUE){// 开始划线dc.MoveTo(m_ptOrigin);dc.LineTo(point);m_ptOrigin=point; // 终点设置为起点}dc.SelectObject(pOldPen); //设置回之前的画笔CView::OnMouseMove(nFlags, point);
}

画个扇形

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

先画出一个点,再到另一个点画出一条线,终点变化,重新划线

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

画出边线

void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 
{// TODO: Add your message handler code here and/or call defaultCClientDC dc(this);// 换个颜色CPen pen(PS_SOLID,1,RGB(255,0,0));CPen *pOldPen=dc.SelectObject(&pen); // 之前的画笔// 判断鼠标状态if(m_bDraw==TRUE){// 开始划线dc.MoveTo(m_ptOrigin);dc.LineTo(m_ptOld); // 画出一个点// dc.MoveTo(m_ptOrigin); // 线性的扇形dc.MoveTo(m_ptOld); // 画出边线dc.LineTo(point);m_ptOld=point;}dc.SelectObject(pOldPen); //设置回之前的画笔CView::OnMouseMove(nFlags, point);
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这篇关于VC++学习(5)——文本编程,插入符的初始化,图形插入符;文字始终在窗口;字符输入功能,回车换行,删除,左键定位;字体修改,字体平滑变色的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084939

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Linux命令rm如何删除名字以“-”开头的文件

《Linux命令rm如何删除名字以“-”开头的文件》Linux中,命令的解析机制非常灵活,它会根据命令的开头字符来判断是否需要执行命令选项,对于文件操作命令(如rm、ls等),系统默认会将命令开头的某... 目录先搞懂:为啥“-”开头的文件删不掉?两种超简单的删除方法(小白也能学会)方法1:用“--”分隔命

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

C++读写word文档(.docx)DuckX库的使用详解

《C++读写word文档(.docx)DuckX库的使用详解》DuckX是C++库,用于创建/编辑.docx文件,支持读取文档、添加段落/片段、编辑表格,解决中文乱码需更改编码方案,进阶功能含文本替换... 目录一、基本用法1. 读取文档3. 添加段落4. 添加片段3. 编辑表格二、进阶用法1. 文本替换2

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

Python实现自动化删除Word文档超链接的实用技巧

《Python实现自动化删除Word文档超链接的实用技巧》在日常工作中,我们经常需要处理各种Word文档,本文将深入探讨如何利用Python,特别是借助一个功能强大的库,高效移除Word文档中的超链接... 目录为什么需要移除Word文档超链接准备工作:环境搭建与库安装核心实现:使用python移除超链接的

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与