社区
界面
帖子详情
CEdit文本框垂直居中
zj62366804
2010-08-11 10:29:01
在单文档程序中,在view窗口中拖拉一个矩形,双击矩形,在矩形范围内产生一个文本框,请问如何使他在输入的时候,是垂直居中的,输入完毕后,文本框消失,把文本框里内容写到矩形内
...全文
1006
11
打赏
收藏
CEdit文本框垂直居中
在单文档程序中,在view窗口中拖拉一个矩形,双击矩形,在矩形范围内产生一个文本框,请问如何使他在输入的时候,是垂直居中的,输入完毕后,文本框消失,把文本框里内容写到矩形内
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
向立天
2010-08-17
打赏
举报
回复
[Quote=引用 9 楼 muzizongheng 的回复:]
引用 7 楼 zj62366804 的回复:
引用 6 楼 muzizongheng 的回复:
重载CEdit 自己在重画。 用DrawText的DT_VCENTER
DrawText的DT_VCENTER 只支持单行的吧
可以这样, 用DrawText先算出多行文字的rect, 然后比较edit的rect, rect相减/2,计算居中后用DrawText画多行。
[/Quote]
这个需求就要通过这种方式自己计算自己输出
没有什么好方法
要不就用成熟的控件库
比如VG
muzizongheng
2010-08-13
打赏
举报
回复
重载CEdit 自己在重画。 用DrawText的DT_VCENTER
muzizongheng
2010-08-13
打赏
举报
回复
[Quote=引用 7 楼 zj62366804 的回复:]
引用 6 楼 muzizongheng 的回复:
重载CEdit 自己在重画。 用DrawText的DT_VCENTER
DrawText的DT_VCENTER 只支持单行的吧
[/Quote]
可以这样, 用DrawText先算出多行文字的rect, 然后比较edit的rect, rect相减/2,计算居中后用DrawText画多行。
Eleven
2010-08-13
打赏
举报
回复
[Quote=引用 7 楼 zj62366804 的回复:]
引用 6 楼 muzizongheng 的回复:
重载CEdit 自己在重画。 用DrawText的DT_VCENTER
DrawText的DT_VCENTER 只支持单行的吧
[/Quote]
DT_WORDBREAK
zj62366804
2010-08-13
打赏
举报
回复
[Quote=引用 6 楼 muzizongheng 的回复:]
重载CEdit 自己在重画。 用DrawText的DT_VCENTER
[/Quote] DrawText的DT_VCENTER 只支持单行的吧
五香花生米
2010-08-11
打赏
举报
回复
自己创建个CFont,旋转270度,就是竖着的字体了。
CFont vertFont;
vertFont.CreateFont(0, 0, 2700, 2700, FW_BOLD,
0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH, "Arial");
chenjelly
2010-08-11
打赏
举报
回复
哦。不好意思。没有看清楚。您要求的是“垂直居中”。
zj62366804
2010-08-11
打赏
举报
回复
[Quote=引用 2 楼 chenjelly 的回复:]
在你Create的时候设置CEdit对象的样式里选择居中,
DWORD dwStyle;
dwStyle = ES_AUTOHSCROLL | ES_CENTER |ES_MULTILINE
| WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER;
[/Quote]
您的是水平居中
chenjelly
2010-08-11
打赏
举报
回复
在你Create的时候设置CEdit对象的样式里选择居中,
DWORD dwStyle;
dwStyle = ES_AUTOHSCROLL |
ES_CENTER |ES_MULTILINE
| WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER;
m_Edit.Create(dwStyle,CRect(10, 10, 100, 100), this, 1);
对于你说的输入完毕后文本框消失,你可以在你输入结束时获取键盘的Enter键消息,在消息响应里用:
m_Edit.ShowWindow(SW_HIDE);//隐藏文本框
m_Edit.EnableWindow(FALSE);//使文件框不可用,也许你只需要将文本框隐藏
希望能对你有所帮助。
zj62366804
2010-08-11
打赏
举报
回复
要支持多行的
MFC 重载
CEdit
文本框
“
垂直
居中
”
在MFC中
CEdit
控件的对齐方式只有 左、右对齐,
居中
对齐,但是没有
垂直
居中
对齐,对于单行的
CEdit
来说,例如 字体高度是 30px,而
CEdit
有30px的话,那么我们输入的字体就会过于偏上,很是影响美观(如图:) 解决方案:将字体的输出位置往下偏移一定的位置就OK了,这里提供的偏移方法是将
CEdit
的工作区域往下偏移, 所谓的工作区域也就是能够显示字体的区域. 代码如下: ①、在创建
CEdit
的时候 添加 多行的属性,ES_MULTILINE,因为对于单行的
CEdit
是不能设置工作区域的,我
VC 编辑框
垂直
居中
和字体颜色设置
让单行编辑框文本
垂直
居中
,可以有多种方法: (1)将
文本框
样式重设为多行
文本框
,然后通过消息 EM_SETRECT 设置,这比较简单和快速; (2)重绘编辑框的区域,特别是顶部区域,扩大它,让区域的扩展衬托出文本的
居中
; (3)直接改变字体和编辑框高度,让他们相适应,也可以显示出
文本框
垂直
居中
效果; (4)完全重绘编辑框,这样的自定制是最好的了,但这个工作繁重; (5)把编辑框中可输入
CEdit
文本上下
居中
(
垂直
居中
)
在多行模式下的
CEdit
类提供void
CEdit
::SetRectNP( LPCRECT lpRect)函数,此函数用来调整文本编辑的区域,用这个函数可以设置上下左右Margins,而void SetMargins( UINT nLeft, UINT nRight)函数只能设置左右Margins。
CRect rc = CRect(0,0,0,0);
edit.GetClientRect(&rc);
rc.DeflateRect(10,10,10,1
CEdit
文本
垂直
居中
(单行解决方案)
转载自:https://blog.csdn.net/crybird/article/details/8959084 关于这个问题,网上流传的都是多行模仿,最后有附件, 由于怕细节不完美,决定探究下派生
CEdit
方法,可以响应WM_NCCALCSIZE消息,关键代码如下: void CVCenterEdit::OnNcCalcSize(BOOL bCalcValidRect...
duilib 多行
垂直
居中
问题.
duilib 显示文字 调用的是::DrawText() ,换行需要设置属性.wordbreak. else if( _tcsicmp(pstrName, _T("wordbreak")) == 0 ) { if( _tcsicmp(pstrValue, _T("true")) == 0 ) { m_uTextStyle &= ~DT_SINGLELINE; m_uText
界面
15,978
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章