CEdit 控件,怎么实现自动换行?

蠓虫带着秤砣飞 2014-06-19 07:46:23
网上搜索,找到的结果都可以说是骗子。看了让人郁闷。
基本上都是往要显示的字符串里面加\r\n,这个当然是可以换行的,但那不是自动换行!
因为这个时候吧控件中的文本复制出来就会发现比原来的文本多了换行符。
当然,这个可以在用户复制的时候操作剪贴板复制成原来的字符。

有没有办法使CEdit控件真正的具有自动换行的功能呢?
DrawText是可以自动换行的,加上这个属性就可以DT_WORDBREAK。

请求指点,子类化或者别的方法使CEdit控件真正具有自动换行功能的方法。
...全文
777 32 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
1楼真大神 啊哈哈哈哈哈哈
boreboluomi 2016-05-16
  • 打赏
  • 举报
回复
引用 8 楼 zjq9931 的回复:
[quote=引用 4 楼 schlafenhamster 的回复:] Because ES_AUTOHSCROLL style can not be modified after an edit control has been created, We have to create a new edit control and destroy the old one! The ES_AUTOHSCROLL actually controls the wrap on/off of the edit. By the way,without the WS_HSCROOL style, you also can scroll the edit by pressing the left or right key.
这个仍然不行,标红的字体,意思是自动水平滚动条控制的是edit的外框,如果没有这个属性,你仍然可以用左右方向键滚动edit控件。和自动换行,没有一点关系。。。。。[/quote] 红色部分正表示 ES_AUTOHSCROLL控制是否折行
  • 打赏
  • 举报
回复
引用 29 楼 GANSUYZHY 的回复:
[quote=引用 28 楼 zjq9931 的回复:] [quote=引用 27 楼 GANSUYZHY 的回复:] [quote=引用 6 楼 zjq9931 的回复:] [quote=引用 1 楼 GANSUYZHY 的回复:] 设置: AutoSHcroll False AutoVHcroll True Multiline True VerticleSrcol True 即可
这些我都试了,根本不行。。。。 网上的都是这样说的: AutoVHcroll True //自动滚屏而已 Multiline True //只是支持多行,如果文本中有回车是可以的。如果文本中没有回车,还是一样的不行。 VerticleSrcol True//滚动条而已。[/quote]那我就不知道了,我用的可以的,给你截个图吧[/quote] 我试验过了,VS确实可以,但VC6就是不行。确实太老了。[/quote]用S吧,VC6V过时了。。。[/quote] 唉,是的。
HUSTYZHY 2014-06-22
  • 打赏
  • 举报
回复
引用 28 楼 zjq9931 的回复:
[quote=引用 27 楼 GANSUYZHY 的回复:] [quote=引用 6 楼 zjq9931 的回复:] [quote=引用 1 楼 GANSUYZHY 的回复:] 设置: AutoSHcroll False AutoVHcroll True Multiline True VerticleSrcol True 即可
这些我都试了,根本不行。。。。 网上的都是这样说的: AutoVHcroll True //自动滚屏而已 Multiline True //只是支持多行,如果文本中有回车是可以的。如果文本中没有回车,还是一样的不行。 VerticleSrcol True//滚动条而已。[/quote]那我就不知道了,我用的可以的,给你截个图吧[/quote] 我试验过了,VS确实可以,但VC6就是不行。确实太老了。[/quote]用S吧,VC6V过时了。。。
HUSTYZHY 2014-06-21
  • 打赏
  • 举报
回复
引用 6 楼 zjq9931 的回复:
[quote=引用 1 楼 GANSUYZHY 的回复:]
设置:
AutoSHcroll False
AutoVHcroll True
Multiline True
VerticleSrcol True
即可

这些我都试了,根本不行。。。。
网上的都是这样说的:
AutoVHcroll True //自动滚屏而已
Multiline True //只是支持多行,如果文本中有回车是可以的。如果文本中没有回车,还是一样的不行。
VerticleSrcol True//滚动条而已。[/quote]那我就不知道了,我用的可以的,给你截个图吧
  • 打赏
  • 举报
回复
引用 25 楼 lis2012 的回复:
[quote=引用 楼主 zjq9931 的回复:] 网上搜索,找到的结果都可以说是骗子。看了让人郁闷。 基本上都是往要显示的字符串里面加\r\n,这个当然是可以换行的,但那不是自动换行! 因为这个时候吧控件中的文本复制出来就会发现比原来的文本多了换行符。 当然,这个可以在用户复制的时候操作剪贴板复制成原来的字符。 有没有办法使CEdit控件真正的具有自动换行的功能呢? DrawText是可以自动换行的,加上这个属性就可以DT_WORDBREAK。 请求指点,子类化或者别的方法使CEdit控件真正具有自动换行功能的方法。
这么想自动换行,直接使用richeditbox,把Multiline True (VerticleSrcol True可以不要) 要想回车换行 Want Return True[/quote] 应当是VS的都可以。我用的VC6不行。
  • 打赏
  • 举报
回复
引用 27 楼 GANSUYZHY 的回复:
[quote=引用 6 楼 zjq9931 的回复:] [quote=引用 1 楼 GANSUYZHY 的回复:] 设置: AutoSHcroll False AutoVHcroll True Multiline True VerticleSrcol True 即可
这些我都试了,根本不行。。。。 网上的都是这样说的: AutoVHcroll True //自动滚屏而已 Multiline True //只是支持多行,如果文本中有回车是可以的。如果文本中没有回车,还是一样的不行。 VerticleSrcol True//滚动条而已。[/quote]那我就不知道了,我用的可以的,给你截个图吧[/quote] 我试验过了,VS确实可以,但VC6就是不行。确实太老了。
schlafenhamster 2014-06-20
  • 打赏
  • 举报
回复
"3D风格确实没了" 3D 是 exstyle , 忘了考虑。 读出 exStyle。 Create 要 改成 CreatEx(exSytle,。。。。 谢谢
schlafenhamster 2014-06-20
  • 打赏
  • 举报
回复
vc6上 如果 不 切换 2种 风格 就 不存在 “销毁原来的,新建一个新的”。 我的 代码 是 要 切换的。
  • 打赏
  • 举报
回复
引用 19 楼 schlafenhamster 的回复:
这是 vc6 上 的 代码, 2010 没用过, 兴许 “不用销毁原来的,也不用新建一个新的”。 “原来的3D风格给没了” 应该 不会, 因为 原来的 style 是 读出 后 改变的 。 有时间 看看。
我新改的代码就是在VC6验证过的。是可以的。 你给的代码3D风格确实没了,在VC6上验证过的。
  • 打赏
  • 举报
回复
引用 18 楼 lx624909677 的回复:
直接使用lisctrl控件,把风格改一下就可以了
listctrl是个好方法,能否说一下改哪些属性呢?
schlafenhamster 2014-06-20
  • 打赏
  • 举报
回复
这是 vc6 上 的 代码, 2010 没用过, 兴许 “不用销毁原来的,也不用新建一个新的”。 “原来的3D风格给没了” 应该 不会, 因为 原来的 style 是 读出 后 改变的 。 有时间 看看。
lx624909677 2014-06-20
  • 打赏
  • 举报
回复
直接使用lisctrl控件,把风格改一下就可以了
  • 打赏
  • 举报
回复
引用 15 楼 schlafenhamster 的回复:
"还有一点想问你的。这段文字的来源是哪里" 这段文字 是 我的 体验, 是 自己 胡写的 , 对不对 请 检验。
再进一步: 子类化一下CEdit类,更改一下OnCreate函数:

int CColorEdit::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CEdit::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	DWORD Style = GetWindowLong(CEdit::m_hWnd, GWL_STYLE);
	SetWindowLong(CEdit::m_hWnd, GWL_STYLE, Style);
	return 0;
}
这样就可以,在属性面板里面设这好属性就可以了,类似VS2010了。
  • 打赏
  • 举报
回复
引用 15 楼 schlafenhamster 的回复:
"还有一点想问你的。这段文字的来源是哪里" 这段文字 是 我的 体验, 是 自己 胡写的 , 对不对 请 检验。
强大。 你给的代码,原来的3D风格给没了,当然可以通过别的方法找回来。但是过程比较崎岖。。。不是太好。。。 根据你的经验和提示,我自己改了一下,实现了,不用销毁原来的,也不用新建一个新的,而且保留原来的3D风格。 代码又短的实现方法。 起作用的就两行就代码: 再次多谢您的经验,给我的帮助

void CEditScreenDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	CString str = "1234567890一二三四五六七八九十1234567890一二三四五六七八九十1234567890一二三四五六七八九十1234567890一二三四五六七八九十1234567890一二三四五六七八九十1234567890";
	DWORD Style = GetWindowLong(m_edt1.m_hWnd,GWL_STYLE);
	SetWindowLong(m_edt1.m_hWnd, GWL_STYLE, Style);
	m_edt1.SetWindowText(str);
}
schlafenhamster 2014-06-20
  • 打赏
  • 举报
回复
"还有一点想问你的。这段文字的来源是哪里" 这段文字 是 我的 体验, 是 自己 胡写的 , 对不对 请 检验。
  • 打赏
  • 举报
回复
引用 9 楼 schlafenhamster 的回复:
怎么 不明白 ? “只是自动滚屏,显示了横向滚动条” 不要自动滚屏,没有横向滚动条 才是 “Word break” 即 ; Style &=~(ES_AUTOHSCROLL|WS_HSCROLL);
还有一点想问你的。这段文字的来源是哪里? Because ES_AUTOHSCROLL style can not be modified after an edit control has been created, We have to create a new edit control and destroy the old one! The ES_AUTOHSCROLL actually controls the wrap on/off of the edit. By the way,without the WS_HSCROOL style, you also can scroll the edit by pressing the left or right key.
  • 打赏
  • 举报
回复
引用 1 楼 GANSUYZHY 的回复:
设置: AutoSHcroll False AutoVHcroll True Multiline True VerticleSrcol True 即可
VS 2010的确实可以。我用的VC6确实不行。 要通过 @schlafenhamster 的方法才行。
  • 打赏
  • 举报
回复
引用 11 楼 schlafenhamster 的回复:
你看到 #5楼的 edit 初始化了 没有 ? 这是我 写 的 ! 这些 字符串 间是 没有 CRLF 的 ,如果有 ES_AUTOHSCROLL , 就有 滚动条, 他们会 变成 一行 ! 没有 ES_AUTOHSCROLL 时他们 会 ”自动换行“ 。
看到了,完全明白了。
schlafenhamster 2014-06-20
  • 打赏
  • 举报
回复
你看到 #5楼的 edit 初始化了 没有 ? 这是我 写 的 ! 这些 字符串 间是 没有 CRLF 的 ,如果有 ES_AUTOHSCROLL , 就有 滚动条, 他们会 变成 一行 ! 没有 ES_AUTOHSCROLL 时他们 会 ”自动换行“ 。
加载更多回复(12)

16,547

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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