| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 835 人关注过本帖, 1 人收藏
标题:RichTextbox控件如何根据自身宽、高,以及用户设定的字体、字号和行距,计算 ...
只看楼主 加入收藏
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10709
专家分:43295
注 册:2014-5-20
收藏
得分:0 
以下是引用sych在2025-9-6 11:11:27的发言:

另外如果用字符串,可以用消息传递
Declare INTEGER SendMessage in WIN32API as sendmessage_c2 INTEGER hwnd , INTEGER wMsg , INTEGER wParam , string lParam
#defi EM_REPLACESEL 0xC2
SendMessage_c2(this.edit.hwnd, EM_REPLACESEL, 1, 0hefbbbf+0hc58b)  &&这里要带上标记

UTF-8字串输入在C测试正常,偷点懒贴代码,很简单的。
vfp测试代码:
SetTextUtf8(this.edit.hWnd, STRCONV(0h0D0A+"abc字字123"+0h0D0A+"si",9)+0hC58B)
C代码:
程序代码:
//输入UTF-8字串
DLLIMPORT_C void SetTextUtf8(HWND hRichEdit, LPVOID* pTextUtf8)
{
    SETTEXTEX stx;                                                          //SETTEXTEX {DWORD flags; UINT codepage}
    stx.flags    = ST_SELECTION;                                            //#define ST_SELECTION  2
    stx.codepage = CP_UTF8;                                                 //#define CP_UTF8       65001
    SendMessage(hRichEdit, EM_SETTEXTEX, (WPARAM)&stx, (LPARAM)pTextUtf8);  //#define EM_SETTEXTEX  0x0461
}


3 小时前
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10709
专家分:43295
注 册:2014-5-20
收藏
得分:0 
顺便也试一下保存UTF-8字串,再偷点懒贴代码,也很简单的。
vfp测试代码:
程序代码:
        textUtf8 = REPLICATE(0h00, 10000)    &&要足够大
        len = GetTextUtf8(this.edit.hWnd, @textUtf8, 10000) 
        STRTOFILE(LEFT(textUtf8,len), "utf8.txt", 4)

C代码
程序代码:
//保存为UTF-8字串
DLLIMPORT_C UINT GetTextUtf8(HWND hRichEdit, LPVOID* pBuffer, UINT bufferSize)
{
    GETTEXTEX gtx;  //GETTEXTEX {DWORD cb; DWORD flags; UINT codepage; LPCSTR lpDefaultChar; LPBOOL lpUsedDefChar;}
    gtx.cb            = bufferSize;
    gtx.flags         = GT_USECRLF; //#define GT_USECRLF    1
    gtx.codepage      = CP_UTF8;    //#define CP_UTF8       65001
    gtx.lpDefaultChar = NULL;
    gtx.lpUsedDefChar = NULL;
    return SendMessage(hRichEdit, EM_GETTEXTEX, (WPARAM)&gtx, (LPARAM)pBuffer); //#define EM_GETTEXTEX  0x045E
}


2 小时前
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10709
专家分:43295
注 册:2014-5-20
收藏
得分:0 
完善一下上面保存的过程,增加获取缓冲字节数的函数,不用去乱猜。
vfp代码:
程序代码:
        ** 保存UTF-8字串
        size = GetTextLenGthex(this.edit.hWnd)
        textUtf8 = REPLICATE(0h00, size)
        len = GetTextUtf8(this.edit.hWnd, @textUtf8, size) 
        STRTOFILE(LEFT(textUtf8,len), "utf8.txt", 4)

C代码
程序代码:
//获取RichEdit编辑的UTF-8字节数
DLLIMPORT_C UINT GetTextLenGthex(HWND hRichEdit)
{
    GETTEXTLENGTHEX gtl;            //GETTEXTLENGTHEX {DWORD flags; UINT  codepage;}
    gtl.flags    = GTL_NUMBYTES;    //#define GTL_NUMBYTES  16      返回字节数
    gtl.codepage = CP_UTF8;         //#define CP_UTF8       65001   UTF-8编码
    return SendMessage(hRichEdit, EM_GETTEXTLENGTHEX, (WPARAM)&gtl, 0); //#define EM_GETTEXTLENGTHEX    0x045F
}

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



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

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