当前位置: 首页 > article >正文

RichEdit那点儿事(一)

一、加载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)
http://www.lryc.cn/news/2420885.html

相关文章:

  • DAY1-声速、声压与声强
  • 记录点有意义的事情---csdn数据库被黑(原创)
  • patch 补丁文件制作
  • 修改固态硬盘的物理序列号_买固态怕踩坑?收下这些软件,轻松鉴别好坏
  • 传奇翎风引擎单机架设教程
  • QQ强制视频聊天
  • Moto官方GMS谷歌服务套件For XT800+下载和使用教程
  • 经典SQL语句大全
  • 提升电脑开机速度
  • 推荐开源项目:YUIDoc——JavaScript文档生成引擎
  • socks5原理
  • 课程设计-基于Springboot+Vue的在线考试系统的设计与实现(源码+LW+包运行)
  • Linux入门实验3
  • JAVA转.NET——day03、下
  • Stanford Parser句法分析器
  • svn安装及使用
  • Linux查看当前时间
  • 《隐秘的角落》结局你真的看懂了吗?(细思极恐)
  • 计算机主板一直滴滴响,主板报警声大全_主板一直滴滴滴短响含义详解
  • 花指令
  • kube operator部署kubernetes集群
  • Animation动画——ObjectAnimator基本使用
  • [C++学习日记]-11-抽象、封装、继承和多态
  • C盘根目录下---系统文件详解
  • 360和腾讯QQ的那场战争!
  • Portal游戏的实现理论分析
  • 2024年Android最新Android系统在超级终端下必会的命令大全,我的腾讯安卓面试经历分享
  • Linux服务和守护进程管理:systemctl、service等命令的使用教程和技巧
  • VC++6.0、VS2003、vs2005、vs2008程序依赖DLL
  • 深入浅出hibernate摘录2