int CJWChatServerDlg::GetNumVisibleLines(CRichEditCtrl* pCtrl)
{
CRect rect;
long nFirstChar, nLastChar;
long nFirstLine, nLastLine;
// Get client rect of rich edit control
pCtrl->GetClientRect(rect);
// Get character index close to upper left corner
nFirstChar = pCtrl->CharFromPos(CPoint(0, 0));
// Get character index close to lower right corner
nLastChar = pCtrl->CharFromPos(CPoint(rect.right, rect.bottom));
if (nLastChar < 0)
{
nLastChar = pCtrl->GetTextLength();
}
// Convert to lines
nFirstLine = pCtrl->LineFromChar(nFirstChar);
nLastLine = pCtrl->LineFromChar(nLastChar);
return (nLastLine - nFirstLine);
}
int CJWChatServerDlg::AppendToLogAndScroll(const CString& csMsg, COLORREF color, int iFontSize)
{
long nVisible = 0;
long nInsertionPoint = 0;
CHARFORMAT cf;
m_ChatRoom.GetSelectionCharFormat(cf);
// Initialize character format structure
cf.cbSize = sizeof(CHARFORMAT);
static int iHeight = 100;
cf.dwMask|=CFM_BOLD;
cf.dwEffects |=CFE_BOLD;//设置粗体,取消用cf.dwEffects&=~CFE_BOLD;
cf.dwEffects &= ~CFE_AUTOCOLOR;
cf.dwMask |= CFM_COLOR;
cf.crTextColor = color;
cf.dwMask|=CFM_SIZE;
cf.yHeight = iHeight;//设置高度
iHeight += 50;
cf.dwMask |=CFM_FACE;
_tcscpy(cf.szFaceName ,_T("微软雅黑"));//设置字体
// Set insertion point to end of text
nInsertionPoint = m_ChatRoom.GetWindowTextLength();
m_ChatRoom.SetSel(nInsertionPoint, -1);
// Set the character format
m_ChatRoom.SetSelectionCharFormat(cf);
// Replace selection. Because we have nothing
// selected, this will simply insert
// the string at the current caret position.
m_ChatRoom.ReplaceSel(csMsg);
// Get number of currently visible lines or maximum number of visible lines
// (We must call GetNumVisibleLines() before the first call to LineScroll()!)
nVisible = GetNumVisibleLines(&m_ChatRoom);
// Now this is the fix of CRichEditCtrl's abnormal behaviour when used
// in an application not based on dialogs. Checking the focus prevents
// us from scrolling when the CRichEditCtrl does so automatically,
// even though ES_AUTOxSCROLL style is NOT set.
if (&m_ChatRoom != m_ChatRoom.GetFocus())
{
m_ChatRoom.LineScroll(INT_MAX);
m_ChatRoom.LineScroll(1 - nVisible);
}
return 0;
}
void CJWChatServerDlg::OnBnClickedButtonUpdate()
{
static int i = 0;
COLORREF clrs[4] = {RGB(200, 25, 25), RGB(240, 155, 155), RGB(80, 205, 25), RGB(10, 25, 255)};
AppendToLogAndScroll(_T("多说一下,自从 Lamport 在 1998 年发表 Paxos 算法后,无论何种改进,其重点依然是在消息延迟与性能、吞吐量之间作出各种权衡。\n"), clrs[i], 20);
i++;
i %= 4;
}
相关推荐
MAPPO实战:从理论到代码的协作智能体训练指南
本文详细介绍了MAPPO算法在多智能体协作训练中的实战应用,从理论基础到代码实现全面解析。通过对比PPO与MAPPO的差异,深入讲解CTDE框架、网络架构设计、参数调优等关键环节,并提供实际项目中的调参经验和常见问题解决方案,帮助开发者快速掌握这一强化学习前沿技术。
Richedit使用大全
很不错的源代码http://www.pudn.com/search_db.asp?keyword=MyRichEdit&x=36&y=16richedit 常见使用问题一.常见问题a.可以编译,不能执行的在需要在相应的对话框中加上InitInstance(void)函数中添加AfxInitRichEdit();b.升级默认的Riched版本(默认的有一些bug),如可在Ini
Hypermesh到Abaqus CEL网格转换全攻略:解决欧拉体导入难题
本文详细解析了Hypermesh到Abaqus CEL网格转换的全流程,重点解决欧拉体导入难题。通过单元类型转换、INP文件编辑和多组件合并技术,实现流固耦合仿真的高效前处理。文章包含实用脚本和工程案例,帮助工程师突破ABAQUS CEL分析中的网格转换瓶颈。
VC中的EDIT滚动到最后插入文字
Step1.首先定义全局变量 CEdit* g_showEdit ,然后在OnInitDialog 赋值 ,IDC_XXX为显示的控件ID,而且控件需要设置使能多行显示。//获取控件中内容的大小。网上关于Edit自动滚动底部方法都有缺陷,有些到了3万字就不行了,有些到了65536字就不行了. 以下方法可以解决。//将光标位置跳到最后一个字符。//=============RichEdit 作为日志输出控件===============
你不知道的Postman的Mock接口测试,看这一篇就够了
创建Mock服务你可以从Postman已有的测试集(Collection)中创建Mock Server或者直接创建Mock Server(我们这里选择从已有的测试集中创建Mock Server)Mock server详细配置页面,在此页面中我们可以设置:命名Mock Server选择一个环境(可选的),我们可以选择之前设置过的环境,Mock Server将会使用对应环境中设置过的变量在对应的请求和响应中如果想要将Mock Server设置私有访问的,那么可以勾选此选项,不勾选则对所有人可见。
ArcGIS新手必看:用Landsat 8数据计算植被覆盖度的完整流程(附DEM裁剪技巧)
本文为ArcGIS新手提供了使用Landsat 8数据计算植被覆盖度的完整流程指南。详细讲解了从数据预处理、NDVI计算到基于像元二分模型反演植被覆盖度的核心步骤,并重点分享了利用DEM进行精确裁剪的实用技巧,帮助用户高效完成地表信息提取与分析。
MFC之CRichEdit改变指定区域的背景色和字体
2019独角兽企业重金招聘Python工程师标准>>> ...
GCdepth散点图绘制
基因组组装完成后,需要对组装结果进行评估,其中GC_depth图是一个比较重要的指标,改图的横坐标是GC含量,纵坐标是平均深度。以30k为窗口(window)无overlap计算其GC含量和平均深度。如果存在样品污染,通常能够从GC含量分析中呈现出来。下文探索了几种绘制GC_depth散点图的方法思路。
RichEdit 增加 行号和 位置Pointer
照此 添加链接描述 博客上代码: 发现有几个问题 1.行号和行数不一定能够对齐. 2.当RichEdit存在滚动时,重绘速度会很慢. 3.使用时间长了之后,会发现行号会消失,原因是 hdcCpb = CreateCompatibleDC(hdcEdit) 失败. ...
Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(10) C++ 前置后置增减运算符重载形式与比较
C语言的++、–运算符在此不讨论。 文章目录1、前置后置增减运算符重载的形式2、前置和后置运算符的性能比较 1、前置后置增减运算符重载的形式 自增运算符“++”和自减运算符“–”分别包含两个版本。即运算符前置形式(如 ++x)和运算符后置形式(如 x++),这两者进行的操作是不一样的。因此,当我们在对这两个运算符进行重载时,就必须区分前置和后置形式。C++根据参数的个数来区分前置和后置形式。如果按照通常的方法来重载 ++ 运算符(即作为成员函数重载时不带参数,或者作为非成员函数重载时带有一个参数),那么重载
第 9 篇:TMC2240 速度调节实战|STEP 信号生成 + 平滑调速算法(无抖动)
摘要:本文详细介绍了TMC2240电机调速方案,重点解决调速时电机抖动、丢步等问题。核心原理是通过STEP信号频率控制转速,结合平滑加减速算法避免电流冲击。文章从速度与STEP频率的数学关系入手,提供了定时器生成固定频率STEP信号的实现代码,并给出不同转速下的频率参数表。针对42步进电机+256微步细分场景,详细讲解了定时器初始化、中断处理及固定转速设置方法,帮助开发者实现稳定调速。全文包含可直接复用的代码片段,适合嵌入式开发者快速实现电机平滑调速功能。
CRichEditCtrl的使用(很全面)
当我第一次将Rich Edit控件放在资源窗体上的时候,发现程序根本就不能运行。后来才找到原因,原来Rich Edit 控件是Ole类型的控件。在加载Rich Edit 控件的时候,必须进行初始化。代码如下: BOOLCTestApp::InitInstance(){ ..... AfxInitRichEdit(); } 用法: 1.设置edit
ImportError: DLL load failed while importing _rust: 找不到指定的程序的解决方案
本文主要介绍了ImportError: DLL load failed while importing _rust: 找不到指定的程序的解决方案,希望能对使用Python的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案
RichEdit那点儿事(一)
一、加载riched20.dll如果对话框里含用RichEdit控件,在创建这个对话框之前(或在需要动态创建RichEdit之前),必须首先加载相应的动态链接库,否则创建会失败。不同的库支持不同的RichEdit版本,对应关系如下: 控件版本 动态链接库名 1.0 Riched32.dll 2.0
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
MFC高级控件RichEdit2.0的使用
2、在对话框中添加若干编辑框和控件,按住ctrl+D键设置焦点顺序(例如你想编辑框IDC_EDIT1设置为第一个焦点,只需要第一个点这个编辑框即可,接下来的依次点就可以了);2、此方法可以实现在编辑框之间的依次切换,当遇到第一个按钮控件时(一般设置为缺省按钮),按下回车键相当于执行鼠标点击该按钮的功能。将需要被设置到焦点的控件的tab order设为1。注意:1、IDOK为对话框中的缺省按钮ID,若对话框的缺省按钮已更改,则写相对应的缺省按钮的ID号;// TODO: 在此添加专用代码和/或调用基类。
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
MFC笔记 RichEdit控件
关于个性化字体的展示一例,我们用到的关键技术有以下几点: (1)GetDefaultCharFormat()方法 该方法用于设置RichEdit控件的默认的字符格式化属性,语法如下: DWORD GetDefaultCharFormat(CHARFORMAT& cf)const; 参数说明: cf:指向一个CHARFORMAT结构的指针,该结构将包含默认的字符格式化属性。 (2)Set
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
CRichEdit控件操作使用
CRichEdit控件操作相关一般性问题1. 代码编译通过了,运行后RichEdit控件不显示,在InitInstance中添加BOOL CWinApp::InitInstance (){…AfxInitRichEdit(); - RichEdit 1.0或 AfxInitRichEdit2(); - RichEdit 2.0…} 2. 升级默认的RichEdit版本,默认的版
RichEdit控件的范例
RichEditCtrlEx.h C/C++ code ///////////////////////////////////////////////////////////////////////////// // Name: RICHEDITCTRLEX.H // Purpose: CRichEditCtrlEx // Author: yfq
RichEdit使用大全
RichEdit使用大全 一.常见问题a.可以编译,不能执行的AfxInitRichEdit();b.升级默认的Riched版本(默认的有一些bug),如可在InitInstance中添加LoadLibrary("RICHED20.DLL")最后注意 FreeLibrary 如果是CRichEditView基类的可用BOOL CXXXXXXView::PreCreate
uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)"解决办法
如果在编译MFC程序的时候出现下列及类似的错误: 1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new.obj) 中定义 1>uafxcwd.lib(afxmem.obj) : error LNK2005:
265



被折叠的 条评论
为什么被折叠?



