| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 1948 人关注过本帖, 1 人收藏
标题:RichTextbox控件如何根据自身宽、高,以及用户设定的字体、字号和行距,计算 ...
只看楼主 加入收藏
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:506
专家分:376
注 册:2013-10-4
收藏
得分:0 
以下是引用吹水佬在2025-9-5 07:36:15的发言:
LockScreen 是 Lock vfp窗口,对 richedit 可能无效。
试试:
SendMessage(hRichEdit, WM_SETREDRAW, 0, 0)    && Lock
SendMessage(hRichEdit, WM_SETREDRAW, 1, 0)    && UnLock


大佬啊,这两行代码,表面上好用,实战可能会有(大)麻烦!
今天晕头晕脑地调试了整整一天,Richtextbox表现一直很不正常,随机性地抛出异常。
经常性地表现为:
在 Lock/UnLock 代码之后,Richtextbox可能无法以代码激活,呈现灰色,需手动点击一次才能够唤醒。
一开始一直以为是某个深藏不露的逻辑错误,拼命地Debug,拼命地查错,一直无办法解决……直至晚上10点,一拍脑门,这才想起来!——注释掉了这一组 Lock/UnLock 后,整个世界一下子豁然清朗了!
原来是它们搞的鬼哇!
吐血!
慎用!慎用!慎用!
——说三遍。
前天 22:37
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10758
专家分:43344
注 册:2014-5-20
收藏
得分:0 
回复 111楼 cssnet
WM_SETREDRAW消息实质是从窗口中删除或添加 WS_VISIBLE 样式。
MS在WM_SETREDRAW消息说明中有这样一段:
“最后,应用程序可以调用 RedrawWindow(hWnd, NULL, NULL, RDW_ERASE |RDW_FRAME |RDW_INVALIDATE |RDW_ALLCHILDREN) 会重新绘制”
看看有无作用

前天 23:24
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:506
专家分:376
注 册:2013-10-4
收藏
得分:0 
以下是引用吹水佬在2025-10-8 23:24:41的发言:

WM_SETREDRAW消息实质是从窗口中删除或添加 WS_VISIBLE 样式。
MS在WM_SETREDRAW消息说明中有这样一段:
“最后,应用程序可以调用 RedrawWindow(hWnd, NULL, NULL, RDW_ERASE |RDW_FRAME |RDW_INVALIDATE |RDW_ALLCHILDREN) 会重新绘制”
看看有无作用


确实很可能是Redraw的问题。
你这么一说,我想起来啦:
许多年以前,我们曾套用网上的开源 VB6 代码,编译出一个 Richtextbox 的替代品,以便更好地支持Unicode。VB6 的代码,说实话,仅限于“勉强看懂”水平,修修补补,根据自己需求定制一下个别方法函数,勉强倒也还凑合;若正儿八经拿 VB6 去写控件,那做不到!那控件同样也有这个Redraw问题:绝对不能改Visible!一改,就变成了僵尸,无论如何再也唤不醒了!
当时我们自己实在没能力修复这个Bug,无人精通 VB6。最后想出来的解决办法比较搞笑:
若需 .Visible = .F. ,就设置:
with this
    .left = 1
    .top = 1
    .width = 1
    .height = 1
endwith
理论上,应该不会有人能留意到,在窗口左上角有个小黑点——那是一片海,一个世界!

总结一下:
自己编写可视化控件,有可能会遇到无数奇奇怪怪、匪夷所思的Bug,你根本想都想不到的,故而上次你一晚上弄一组控件出来,问“有没有搞头”?——当然有搞头!不过——重点是这个“不过”——事情恐怕没那么简单。
讲真,很鬼复杂滴!


昨天 11:49
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10758
专家分:43344
注 册:2014-5-20
收藏
得分:0 
以下是引用cssnet在2025-10-9 11:49:31的发言:
总结一下:
自己编写可视化控件,有可能会遇到无数奇奇怪怪、匪夷所思的Bug,你根本想都想不到的,故而上次你一晚上弄一组控件出来,问“有没有搞头”?——当然有搞头!不过——重点是这个“不过”——事情恐怕没那么简单。
讲真,很鬼复杂滴!

主要是VFP的UI有自己的一套,对第三方的东西有时不那么“友好”。
如那个“有没有搞头”,如果直接在vfp的表单中用CreateWindow创建子控件,问题就更复杂不好处理。

昨晚 20:12
快速回复:RichTextbox控件如何根据自身宽、高,以及用户设定的字体、字号和行距 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018814 second(s), 10 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved