RichEdit那点儿事(一)

RichEdit的加载问题 1、问题来源 今天编译一个界面库代码,在VS2010下没有问题,但是在VS2012下却报了很多错,其中一个是说没有找到riched20.lib这个库。首先到SDK路径下去找,确实没有找到这个库,难道是微软的人打瞌睡,出了这样的错误? 2. 找原因 我带着疑惑,在VS2010种查找了一下。在这里边我用的是SDK 7.0A, 很让人高兴,riched20.lib这个库在lib目录下,所以编译没 阅读详情

一、加载riched20.dll

如果对话框里含用RichEdit控件,在创建这个对话框之前(或在需要动态创建RichEdit之前),必须首先加载相应的动态链接库,否则创建会失败。不同的库支持不同的RichEdit版本,对应关系如下:

控件版本动态链接库名
1.0
Riched32.dll
2.0
Riched20.dll
3.0
Riched20.dll
4.1
Msftedit.dll

不同的Windows版本自带的RichEdit库不同,对应关系如下:

Windows XP SP1Includes Rich Edit 4.1, Rich Edit 3.0, and a Rich Edit 1.0 emulator.
Windows XPIncludes Rich Edit 3.0 with a Rich Edit 1.0 emulator.
Windows MeIncludes Rich Edit 1.0 and 3.0.
Windows 2000Includes Rich Edit 3.0 with a Rich Edit 1.0 emulator.
Windows NT 4.0Includes Rich Edit 1.0 and 2.0.
Windows 98Includes Rich Edit 1.0 and 2.0.
Windows 95Includes only Rich Edit 1.0. However, Riched20.dll is compatible with Windows 95 and may be installed by an application that requires it.

示例:

class RichEditLib {
HMODULE h_;
public:
RichEditLib()
: h_(LoadLibrary(_T("riched20.dll")))
{
if (!h_)
throw std::runtime_error("Cannot load /"riched20.dll/".");
}
~RichEditLib() {
FreeLibrary(h_);
}
};
int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) {
try {
....
RichEditLib rel;
} catch (std::exception & ex) {
::MessageBoxA(::GetActiveWindow(), ex.what(), NULL, MB_OK | MB_ICONSTOP);
return -1;
}
....
return 0;
}

二、常用方法

1、得到控件中包含文本的行数

向控件发送消息EM_GETLINECOUNT可得到它包含的文本的总行数,但要注意当文本为空的时候,它还是返回1,换句话说,它返回的总行数永远不会小于1。所以要真正知道现在有多少行,必须做些小处理:

int getRichEditLineCount(HWND richedit) {
int result = SendMessage(richedit, EM_GETLINECOUNT, 0, 0);
const int firstCharPosOfLastLine = (int)SendMessage(richedit, EM_LINEINDEX, result-1, 0);
if (!SendMessage(richedit, EM_LINELENGTH, firstCharPosOfLastLine, 0))
--result;
return result;
}

2、取最末尾字符的位置

int getRichEditTail(HWND richedit) {
int const lines = getRichEditLineCount(richedit);
int result = (int)SendMessage(richedit, EM_LINEINDEX, lines-1, 0);
result += (int)SendMessage(richedit, EM_LINELENGTH, result, 0);
return result;
}

3、滚动到最后一行

如果写代码在RichEdit里添加一行一行的文本,有时候需要让它自动滚动到最后一行(比如日志、聊天室等),向它发送WM_VSCROLL消息即可:

SendMessage(richedit, WM_VSCROLL, SB_BOTTOM, 0)
Duilib中为RichEdit\Edit控件添加自定义右键菜单 前言 Duilib中的RichEdit控件在使用中发现,基本上对复制、粘贴、剪切等快捷方式都是支持的,不过唯一缺点是没有右键菜单,感觉不够好,于是就想着加上右键菜单。 右键菜单基本思路是,在RichEdit的消息处理函数中对鼠标的右键消息处理,发送一个自定义的Notify消息出来,主窗口中受到这个消息后弹出自己的右键菜单。 实现方法 第一步:把鼠标右键消息转 阅读详情

相关推荐

VC6.0使用RichEdit2.0(GifOleControl 1.0.2 补充说明)

由于AfxInitRichEdit() 装载的是 RichEdit 1.0 Control (RICHED32.DLL),该版本BUG较多,需要在装载3.0的控件。方法如下: 以对话框为例:       (1)    增加一全局变量 HMODULE hMod;       (2)    在CxxxApp::InitInstance()中添加一句hMod = LoadLibrary(_T("

Richard的专栏 4237

MFC高级控件RichEdit2.0的使用

2、在对话框中添加若干编辑框和控件,按住ctrl+D键设置焦点顺序(例如你想编辑框IDC_EDIT1设置为第一个焦点,只需要第一个点这个编辑框即可,接下来的依次点就可以了);2、此方法可以实现在编辑框之间的依次切换,当遇到第一个按钮控件时(一般设置为缺省按钮),按下回车键相当于执行鼠标点击该按钮的功能。将需要被设置到焦点的控件的tab order设为1。注意:1、IDOK为对话框中的缺省按钮ID,若对话框的缺省按钮已更改,则写相对应的缺省按钮的ID号;// TODO: 在此添加专用代码和/或调用基类。

zhaopeng01zp的博客 4583

RichEdit读取rtf格式

接到需求,需要在播放器播放失败时显示播放失败的错误原因,引导用户自己解决,减轻客服压力,在看到产品设计挺长的原因说明后,考虑维护简单,避免使用xml配置中直接写死的方式来解决,经过权衡后通过RichEdit读取rtf文件的方式来保留格式,并且易于后期维护

int_tulip的专栏 3709

RichEdit 增加 行号和 位置Pointer

照此 添加链接描述 博客上代码: 发现有几个问题 1.行号和行数不一定能够对齐. 2.当RichEdit存在滚动时,重绘速度会很慢. 3.使用时间长了之后,会发现行号会消失,原因是 hdcCpb = CreateCompatibleDC(hdcEdit) 失败. ...

huyun12041204的博客 1417

《Windows API每日一练》11.4 Richedit控件

在使用 RichEdit 控件时,可以通过代码创建控件实例并进行初始化,也可以在资源编辑器中添加 RichEdit 控件并在程序中获取该控件的句柄进行操作。在上述示例中,通过捕获 WM_COMMAND 和 WM_NOTIFY 消息,并根据消息的参数进行判断,可以处理 RichEdit 控件的命令消息和通知消息。根据具体的消息类型和参数,可以执行相应的处理逻辑。●超链接:RichEdit 控件支持文本中的超链接,可以将文本或图片转换为可点击的链接,点击链接时可以执行相应的操作,如打开网址、跳转到其他部分等。

bcdaren的博客 1393

C++ 2.0版本的富文本RICHEDIT20A的一些总结

最近在修改即时通讯模块相关问题的时候,发现1.0版本的富文本控件CRichEditCtrl有一些bug和问题,比如选中文字时背景色是黑色;当输入白色文字时,选中后不显示文字等。所以决定使用2.0版本的富文本控件,但是远没有刚开始想的那么简单,遇到很多有疑惑的问题,下面就简单的总结一下。 1、使用2.0版本的富文本控件的准备工作 如何在程序中使用2.0版本的富

dvlinker的技术专栏 1万+

CRichedit在结尾添加一行,同时设置字体,大小及颜色,并在添加后自动滚屏到末行,

int CJWChatServerDlg::GetNumVisibleLines(CRichEditCtrl* pCtrl) { CRect rect; long nFirstChar, nLastChar; long nFirstLine, nLastLine; // Get client rect of rich edit control pCtrl->GetClientRect(

运用之妙,存乎一心 9579

实现带行号的 richedit 控件

MS 的 RichText 控件本身没有显示行号的功能,当用这个控件来作为代码编辑器时,我们希望它可以显示行号。这个压缩包中的代码验证了实现这一功能的可能性。

RichEdit的用法总结

richedit 常见使用问题 一.常见问题 a.可以编译,不能执行的 在需要在相应的对话框中加上InitInstance(void)函数中添加 AfxInitRichEdit(); b.升级默认的Riched版本(默认的有一些bug),如 可在InitInstance中添加 LoadLibrary("RICHED20.DLL") 最后注意 FreeLibrary 如果是...

huang714的专栏 4344

带行号的RichEdit

带行号的RichEdit带行号的RichEdit带行号的RichEdit

wordpad

用richedit实现woedpad功能

richedit php,VC中RichEdit 控件的使用

在mfc中使用工具栏里的RichEdit 控件时,应该在程序初始话时加入AfxInitRichEdit,或者AfxInitRichEdit2否则的话 程序会起不来.也没有任何错误信息.这俩函数 是加载 Riched20.dll(Riched32.dll)的.1.设置edit只读属性方法一:m_edit1.SetReadOnly(TRUE);方法二:::SendMessage(m_edit1.m...

weixin_39575170的博客 297

安卓开发工程师在车载项目中的角色与技术实践

本文全面探讨了安卓开发工程师在车载项目中的关键角色,重点分析了技术栈(Kotlin/Java/Gradle)、岗位职责和任职要求。文章详细解读了车载安卓开发的核心技能,包括架构设计、性能优化和缺陷修复,并提供了20个针对性面试问题及答案。特别强调了车载环境的特殊需求,如硬件集成、安全认证和实时性要求。通过技术深度与实践案例的结合,为开发者和企业提供了从需求分析到系统优化的完整指导,旨在提升车载安卓开发的专业水平和招聘效率。

郑伟强dev的专栏 131

MFC RichEdit控件使用方法大全

RichEdit的意思是“富文本编辑控件”,在Edit的基础上添加了很多功能,如对不同字体、字号、文本颜色、背景色、插入Ole对象的支持,Windows系统的写字板就是基于RichEdit的。这篇文章就是介绍RichEdit的相关知识的。 ...

[PE]经典八炮的博客 9721

Qt之自定义QToolTip,去掉显示动画和隐藏延时

先来看看Qt原生QToolTip的缺点:1.当提示内容无变化时,弹窗无法移动。只能先传个空字符串强制弹窗隐藏,然后在新位置再传个字符串。2.默认显示10多秒才消失,当然这个时间是可以设置的,但是如果我想一直显示呢?总不能设置一个超级大的时间吧。3.鼠标移出控件后(调用QToolTip::showText时传入了控件指针)默认300毫秒弹窗才隐藏。而且这个时间没法设置,如果想立即隐藏就没办法了。

草上爬的博客 4268

华为OD机试 - 学校的位置 - 数学问题(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题。

学Java,找哪吒 455

RichEdit

RichEdit的奥妙 一、如何得知当前行号   用RichEdit(或者memo)控件制作文本编辑器时,通过访问linescount属性可以得到总行数,但是若想知道光标当前所在行的行号就麻烦了,因为delphi没有提供这个属性。要实现这个编辑器必备功能,就须调用em_ LineFromChar。请试试下面的程序。   先在窗口中布置一个RichEdit或者memo(命名...

dkopg24406的专栏 695

银河麒麟桌面系统批量交付:封装自动化ISO镜像,百台装机效率提升10倍

麒麟桌面系统自动化ISO镜像定制摘要 本文详细介绍麒麟桌面版ISO安装镜像的定制方法,通过修改系统文件实现自动化安装部署。主要内容包括:1) 挂载原版ISO并提取文件;2) 使用unsquashfs解压系统文件进行定制化修改,包括添加系统标记配置;3) 配置ky-installer.cfg自动应答文件,设置安装参数如用户名、密码、分区方案等;4) 修改grub引导配置启用自动安装模式。该流程支持磁盘加密、自定义分区、自动登录等功能,生成的定制镜像可满足批量部署需求,显著提升系统安装效率。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 1508

Richedit使用大全

Richedit使用大全好文章,收藏先,向作者致敬!一.常见问题a.可以编译,不能执行的AfxInitRichEdit(); b.升级默认的Riched版本(默认的有一些bug),如可在InitInstance中添加LoadLibrary("RICHED20.DLL") 最后注意 FreeLibrary 如果是CRichEditView基类的可用BOOL CXXXXXX

pcseye的专栏 2980

BGP路由聚合:自动聚合和手动聚合

路由聚合是指将多条具体的路由合并为一条聚合路由,以减少路由表的条目数。这种技术通过只向对等体发送聚合后的路由,而不发送所有的具体路由,来减小路由表的规模。同时,被聚合的路由如果发生路由振荡,也不再对网络造成影响,从而提高了网络的稳定性。

网络技术联盟站 1220

IgH EtherCAT 从入门到精通:第 5 章 多主站与系统集成配置

本文介绍了 EtherCAT 多主站配置与系统集成方法。主要内容包括: 多主站实例配置原理:通过内核模块参数指定多个主站设备,每个主站独立管理一条 EtherCAT 总线,最多支持32个主站实例。 配置文件详解:在/etc/ethercat.conf中通过MASTER<X>_DEVICE变量定义各主站绑定的网卡或MAC地址,支持冗余备份配置。 系统服务集成:提供了systemd服务单元文件和传统init.d脚本两种方式实现开机自启动和管理,并建议通过override文件定制服务依赖关系。 架构示

从事嵌入式linux android驱动开发,拥有全栈能力 352

Delphi中RichEdit的奥妙

一、如何得知当前行号  用RichEdit(或者memo)控件制作文本编辑器时,通过访问linescount属性可以得到总行数,但是若想知道光标当前所在行的行号就麻烦了,因为delphi没有提供这个属性。要实现这个编辑器必备功能,就须调用em_ LineFromChar。请试试下面的程序。  先在窗口中布置一个RichEdit或者memo(命名为editor),以及一个button。在butto

wljcr的专栏 2021

【华为OD机试真题 2025B卷】737、统计监控器、需要打开多少监控器 | 机试真题+思路参考+代码分析(C++、Java、Py、C语言、JS)

【华为OD机试真题 2025B卷】737、统计监控器、需要打开多少监控器 | 机试真题+思路参考+代码分析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为

KJ.JK 715

RichEdit中支持超链接的实现

  现在很多IM软件的聊天对话框在接收到网站URL的时候,都能够显示成大家熟悉的蓝色,鼠标移到链接上,还会出现手样的鼠标指针,用户点击后就可以直接打开相应的URL,这对IM软件确实很有用吧,这么方便,实现起来难吗?其实一点也不难,只要设置让你的RICHEDIT支持链接,自动检测URL就行了,再实现一个对连接点击的响应函数就行了。总的来说就几行代码,看看吧。  我用一个对话框工程来说明一下吧。  首

水妖的专栏 7047

基于AC算法的图像显著性检测及Matlab代码实现

以上是基于AC算法的图像显著性检测的Matlab代码实现。图像显著性检测是计算机视觉领域的一个重要任务,其目标是确定图像中最具有显著性的区域,即吸引人眼注意力的区域。图像显著性检测是计算机视觉领域的一个重要任务,其目标是确定图像中最具有显著性的区域,即吸引人眼注意力的区域。AC算法的原理基于人眼视觉系统的特性,人眼在观察图像时通常会先关注图像中的显著性区域,然后才会注意到其他细节。AC算法的原理基于人眼视觉系统的特性,人眼在观察图像时通常会先关注图像中的显著性区域,然后才会注意到其他细节。

TechPulseZ的博客 438

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: 教育产业化
下一篇: 眼泪水就象汗一样跟倒跟倒就流下来了
SeaWave
博客等级 码龄27年 117粉丝 126原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值