这个控件设计之初是为了实现类似QQ的输入框的功能。要求能够自动换行,允许输入汉字及数字,能够点击屏幕确定点在某个字符之前或之后,总之,行为上类似于一个richedit控件,当然,可以指定某段的颜色(以\r\n结尾为一个自然段),可以在行中插入小图标,比如笑脸什么的,就像QQ的输入框一样。
根据以上的需求,可以简单设计一个结构用以标识段:
struct SSectInfo //段信息,以L"\r\n"标示一段结束
{
TCHAR *m_pszSect;
int m_nLength;
int m_nMax;
COLORREF m_color;
};
对于输入框,我们通常做的动作为:
1、点击输入框,确定输入起始位置
2、在起始位置输入文字(插入)
3、在起始位置删除前一个位置的文字
4、在起始位置删除当前位置的文字
5、在起始位置,按下右键,向右移动,从起始位置开始向后选中某几行文字
6、在起始位置,按下右键,向左移动,从起始位置开始向前选中某几行文字\
7、替换选中的文字。
7、在起始位置删除前一个位置的文字
8、在起始位置删除当前位置的文字
9、点击输入框中其它位置,改变起始位置
10、通过按上下左右键或是pgup,pgdn,home,end等,改变起始位置
11、按tab键,增加tab值,并改变起始位置。
针对前述的原始需求,逐一分析,产生原始的设计思路。
直接写设计思路:
根据前面试写的代码,发现不能以段作为索引,因为以段作为索引对于定位数据会存在很多不直观的思维。
1、以行作为索引的想法,点击屏幕,算出行,加上前面的行索引,即为内存中的行。然后在内存中增加数据,则相应的此段中其它的行要有所变动,若删除此行中的数据,同样此段中其它行有所变动。
2、移动上下左右,pgup,pgdn,home,end键,上下键,移向上一行或下一行,左右键,移向一行中的上一个或是下一个,若左边结束,则移向上一行末,若右边结束,则移向下一行初
3、保留行与段的对应查找,保留的目的是当发生宽度变化时,根据原始的位置可以定位到当时显示的字符那儿,其它均应以内存行作为标准。
4、在某行中添加字符串时,若发现总长度大于段的长度时,需要后台自动进行内在扩充,但此过程是自动完成,不影响行的概念。
5、内存行与屏幕行的关系,完全一一对应,并且根据不同的宽度,有不同的内存行。段与内存行的关系,段中有若干内存行,并且是在读取数据的过程中动态生成的。
根据前述思路,假设有如下数据:
“2323232342332好好的,这样,那样,好不好?3333大于段的长度时”
这是一段,如果在手机中显示如下:
2323232342332好好的,
这样,那样,好不好?333
3大于段的长度时
则内存行中为3行,第一行开头为”2”,17个字符,第二行开头为”这“,13个字符,第三行开头为”3“,8个字符
若选中问号,相当于选中第2行第10个字符,在里面插入字符时,第2行的长度需要重新计算,后面相关的长度与开始也需要调整。
6、关于行的计算过程
先按最简单的方式进行计算,总是从头开始,即一旦发生宽度发生变化,即开始从头开始计算每段的行数,一直算到最后一行。
而对于插入,修改,删除的过程,只计算牵涉到的段,并且从段中的某行开始。
当发生窗体宽度变化,则topline也要跟着发生变化,
另外,当屏高度发生变化,应该首先保证选中部分可视,需要调整首行的索引。
分享到:
相关推荐
"实现带行号的 richedit 控件"这一主题就是针对提升代码编辑器用户体验的一个具体实践。Microsoft的RichEdit控件是一个功能强大的文本编辑组件,常用于创建富文本格式的应用,但它本身并不直接支持显示行号。然而,...
在Windows编程中,Rich Edit控件是一个非常重要的组件,它提供了比普通Edit控件更丰富的文本格式化功能,如字体、大小、颜色等的改变。本文将深入探讨如何使用Rich Edit控件来显示文本文件。 首先,理解Rich Edit...
在Windows编程中,RichEdit控件是一个非常常用的文本编辑组件,它提供了比标准Edit控件更丰富的文本格式化功能。本篇文章将详细讲解如何在 RichEdit 控件中实现删除行的操作,并结合自动滚屏功能,使得用户在进行...
在Microsoft Visual C++(VC++)环境中,开发者可以利用各种控件来构建用户界面,其中RichEdit控件是一个功能强大的文本编辑组件。本实例源码着重展示了如何在VC++窗体中集成并使用RichEdit控件,从而实现文本编辑、...
在Windows编程中,RichEdit控件是一个非常强大的文本编辑组件,它支持丰富的文本格式,包括字体、颜色、段落样式等。与标准的Edit控件相比,RichEdit控件提供了更多的功能,比如图像显示。本篇文章将深入探讨如何在...
在Delphi编程环境中,RichEdit控件是一种常用的文本编辑组件,它可以提供类似于Windows记事本的文本编辑功能,包括查找、替换以及字体设计等。在本文中,我们将深入探讨如何利用Delphi的RichEdit控件实现这些高级...
"RichEdit控件源码"是一个重要的资源,它提供了实现富文本编辑功能的控件的源代码。富文本编辑器(Rich Edit)不仅支持基本的文本输入,还能处理复杂的格式化,如字体、大小、颜色、对齐方式以及嵌入图片和超链接等...
RichEdit控件,源自Microsoft的Rich Text Format(RTF)技术,是一种增强型的文本编辑器,相比于普通的Edit控件,它提供了更多高级特性,如支持多种字体、颜色、样式,以及嵌入图片、表格等富文本元素。"超强Rich...
RichEdit控件是Windows SDK提供的一种增强型编辑控件,相较于普通的Edit控件,它提供了更多的功能,如支持多种字体和大小、撤销/重做操作、文本搜索、内嵌OLE对象和拖放编辑等。这些特性使得RichEdit控件适用于需要...
在 SDK 中使用 Rich Edit 控件,以及使用 LISTVIEW、PROGRESS 等控件 在 SDK 编程中,使用 Rich Edit 控件和其他控件,如 LISTVIEW、PROGRESS 等,需要进行一些必要的初始化,否则可能会导致控件无法正常显示。在...
RichEdit控件是Windows编程中用于处理复杂文本编辑功能的一种高级控件,相比普通的Edit控件,它提供了更多的格式化和扩展功能。在本文中,我们将深入探讨RichEdit控件的基础知识,特别是如何设置和保存正文,以及...
10.如何显示载有RichEdit 控件的对话框?(Visual C++编程 源代码)10.如何显示载有RichEdit 控件的对话框?(Visual C++编程 源代码)10.如何显示载有RichEdit 控件的对话框?(Visual C++编程 源代码)10.如何显示...
在Microsoft Foundation Classes (MFC)库中,`RichEdit`控件是一种强大的文本编辑器,提供了比普通`EDIT`控件更多的功能,如格式化文本、支持多种字体和颜色、插入图片等。本文将深入探讨如何在MFC应用程序中创建并...
总的来说,这个压缩包提供了在Duilib中增强聊天窗口功能的关键技术,尤其是关于如何利用RichEdit控件展现丰富内容。通过学习和理解这些示例,开发者可以更有效地在自己的项目中集成类似的功能,提升用户体验。
在Windows编程中,RichEdit控件是一种强大的文本编辑组件,它提供了比标准Edit控件更丰富的格式化功能,如字体、颜色、段落样式等。本文主要探讨RichEdit控件的基础知识,包括它的定义、创建方法以及如何在其中加载...
《深入理解RichEdit控件:第四部分》 RichEdit控件是Windows编程中一个强大的文本编辑组件,尤其适用于需要支持复杂格式化和富文本显示的应用程序。在本文中,我们将深入探讨如何使用和管理RichEdit控件,包括其...
RichEdit控件显示BMP图片 代码示例: //在RichEdit中图文混排显示资源中位图 void CRichEditTestDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 ..... } //在RichEdit中显示PNG、JPG、BMP等...
VB封装RichEdit文本框控件,可编辑文字,实现像Word文字编辑功能的文本控件,关于RichEdith Class(菜新 2007): 下列属性需要在Init过程之前调用.另:如果觉得不方便您可以自己定义类中相关属性与方法 ...
在Visual Studio 2012(VS2012)环境下,开发人员经常需要使用RichEdit控件来实现文本编辑和格式化功能。本示例将深入探讨如何在MFC(Microsoft Foundation Classes)应用程序中初始化并使用RichEdit控件。 首先,...
在"GUI.txt"文件中,可能包含了关于如何在MFC应用程序中使用ListView和RichEdit的详细步骤,包括如何初始化这些控件,如何响应用户交互,以及可能的事件处理函数。你应该仔细阅读并理解这份文档,以更好地运用这些...