CRichEditCtrl诡异的问题,对MFC焦点机制深入了解的来,随时跟帖

mudunke775 2011-04-08 11:45:44
目的:在CRichEditCtrl的光标处插入字符串,使用ReplaceSel()函数。

问题:使用ReplaceSel()函数后,原文本被覆盖。举例:字符串"11",在2个1中间(光标处)插入"a",结果变成:"a",将原字符串覆盖了。

调试及结果:因为我的m_RichEdit是Tabstop的第一位,所以窗口出现时焦点是在m_RichEdit上的(要求是这样的)。现我将第一位焦点移动到其他控件上后,ReplaceSel()函数好用了,是在光标处插入而不是覆盖。

新建了个工程,也是将焦点第一位放到m_RichEdit上,ReplaceSel()函数同样好用。

因为代码太多,无法贴出全部。想请各位大大帮我诊断下,给点经验之谈或是建议,如何解决,为什么会出现这种情况,分不多,就50,谢谢。

...全文
305 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
h100037 2011-04-08
  • 打赏
  • 举报
回复
SetFocus 试下呢
向立天 2011-04-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mudunke775 的回复:]

TO:VisualEleven
我自己也新建个工程试了下,确实没问题,但原工程太大了,全部新建重做工作量太大了
[/Quote]你要是这么说那这个问题就不好分析了
Eleven 2011-04-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mudunke775 的回复:]
调试及结果:(补充)
我新建个CRichEditCtrl对象,使用的是动态Create创建,结果相同,第一焦点就覆盖,不是第一焦点就好用
[/Quote]
动态创建也没有这个问题~
mudunke775 2011-04-08
  • 打赏
  • 举报
回复
TO:VisualEleven
我自己也新建个工程试了下,确实没问题,但原工程太大了,全部新建重做工作量太大了
mudunke775 2011-04-08
  • 打赏
  • 举报
回复
调试及结果:(补充)
我新建个CRichEditCtrl对象,使用的是动态Create创建,结果相同,第一焦点就覆盖,不是第一焦点就好用
Eleven 2011-04-08
  • 打赏
  • 举报
回复
用VC6测试了一下,没有问题~
sjdev 2011-04-08
  • 打赏
  • 举报
回复
の,不会我给的答案楼主都没看吧。
mudunke775 2011-04-08
  • 打赏
  • 举报
回复
问题已解决,并找到的问题所在。

因为CRichEditCtrl所在窗口曾失去焦点(打开了其他窗口),所以在窗口重新获得焦点时,会将第一焦点重新设置到第一控件上,而我的第一控件是CRichEditCtrl,所以窗口将原来的光标位置重置了,我用m_RichEdit.GetSel(m_nStartChar,m_nEndChar);发现已经被改成了0-最大。

所以解决的办法是在窗口失去焦点前纪录光标位置,在重新得到焦点时再设置光标位置。如果不是第一焦点控件,该控件的光标位置会一直保存,所以不会出现这种问题。

VisualEleven,你可以试下,第一焦点控件为CRichEditCtrl,输入一些内容,然后最小化(失去窗口焦点),然后再最大化,你会发现你输入的内容被全部选中了,也就是m_nStartChar,m_nEndChar已经被系统改变!

谢谢大家,结贴
mudunke775 2011-04-08
  • 打赏
  • 举报
回复
使用了最原始的方法,一段一段的注释,找到了问题所在,但是还是不知道如何解决。

原因:m_RichEdit.ReplaceSel(_strText);是通过另一个对话框发送了一个自定义消息过来的时候,在消息处理函数当中执行的。可能是由于此消息在处理时,焦点还没有回来吧。

正在寻找解决办法,找到后会公开出来
mudunke775 2011-04-08
  • 打赏
  • 举报
回复
TO:h100037

在初始化的时候,SetFocus函数没任何作用

m_RichEdit.MoveWindow(1,339,383,64);
m_RichEdit.LimitText(500);
m_RichEdit.SetFocus();

这是在初始化中的代码,最后那个SetFocus()加不加没任何区别,第一焦点不是由这个决定的,是在资源文件里的BEGIN-END里的控件顺序而定
sjdev 2011-04-08
  • 打赏
  • 举报
回复
在光标处插入文本~

long start, end;
m_richEditCtrl.GetSel(start,end);
m_richEditCtrl.SetSel(end, end);
m_richEditCtrl.ReplaceSel()......

内容概要:本文系统研究了虚拟同步发电机(VSG)在并网过程中的惯量-阻尼协同自适应控制策略,结合Simulink仿真与Matlab代码实现,深入探讨其对电网频率稳定的支撑作用。研究内容涵盖VSG的基本建模、双机并联条件下的功率精确分配、微电网黑启动过程、预同步控制技术、虚拟阻抗的引入及其对系统稳定性的影响,并通过根轨迹分析、调节系数对比等方法验证所提控制策略的有效性与鲁棒性。该工作为高比例新能源接入背景下的电力系统提供了增强惯性响应和动态稳定性的解决方案,并构建了一个完整的仿真验证平台。; 适合人群:具备电力系统分析、自动控制理论基础,熟悉Matlab/Simulink仿真环境,从事新能源并网、微电网控制、电力电子变换器控制及电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 掌握虚拟同步发电机的核心运行机理与控制建模方法;② 实现VSG在并网、孤岛切换、黑启动等典型工况下的协同控制仿真;③ 分析惯量与阻尼自适应调控对系统频率动态响应的优化效果;④ 为相关课题研究、高水平论文复现或实际工程项目提供可扩展的仿真模型与技术支持。; 阅读建议:建议结合文中提供的Matlab代码与Simulink模型,逐步搭建仿真系统,重点理解控制策略的设计逻辑与参数整定方法,并通过改变负载扰动、并网时机、控制器增益等工况进行对比仿真,深入掌握系统稳定性分析的关键技术与优化路径。
内容概要:本文档是PCI-SIG发布的工程变更通知(ECN),针对PCI Express Base Specification 3.1版本中的数据链路层包(DLLP)编码进行两项维护性更新。主要变更包括定义一种新的NOP DLLP(无操作数据链路层包),以支持未来硬件发送端的实现优化,并将所有已分配的DLLP类型编码统一整理至规范中的单一表格(Table 3-1),提升文档一致性与可维护性。接收端被要求在不采取任何动作的情况下丢弃NOP DLLP,且该包可携带24位任意负载用于调试或日志记录。文档明确指出此次变更不涉及硬件或软件的功能性改动,对现有系统几乎无影响。; 适合人群:从事PCI Express协议开发、验证的硬件工程师、固件开发者及测试工程师,具备一定高速接口协议基础的技术人员;; 使用场景及目标:①帮助开发人员理解DLLP编码机制及未来硬件优化方向;②为测试规范提供依据,如建议更新Link Test Specification以明确未定义编码测试用例的具体编码选择;③指导协议一致性验证过程中对非法或特殊DLLP的处理行为;; 阅读建议:此资源属于标准修订类技术文档,建议结合PCI Express Base Specification 3.1及相关测试规范对照阅读,重点关注Table 3-1的更新、新增的NOP DLLP格式图(Figure 3-10a)及其在链路层处理流程中的定位,便于准确理解和实施协议要求。
内容概要:本文系统研究了在fs>fr条件下,移相混合控制LLC谐振变换器在低压增益工况下的工作特性,重点探讨变频与移相结合控制策略下的模态切换规律、损耗分布特征及电压增益能力。通过Simulink搭建精确仿真模型,对变换器在不同负载与频率条件下的动态响应、软开关实现情况及能量转换效率进行深入分析,揭示了混合控制机制在拓宽增益范围、优化轻载效率方面的优势,为高频高效电源设计提供了理论依据与仿真验证支持。; 适合人群:具备电力电子与电力系统基础知识,从事开关电源、DC-DC变换器、谐振变换器拓扑研究或新能源变换系统开发的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握LLC谐振变换器在超谐振频率(fs>fr)下的混合控制机理与模态演变规律;②通过仿真分析优化低压输出时的控制参数,提升变换器在宽负载范围内的效率与稳定性;③为实际工程中高频高效电源的设计与性能提升提供仿真验证方法与理论指导; 阅读建议:建议结合文中Simulink仿真模型进行同步操作,重点关注变频与移相控制的协同作用边界、关键波形(如谐振电流、电压增益曲线)的演化趋势,并结合相关文献深化对ZVS/ZCS软开关条件和谐振腔能量传递特性的理解。

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧