mfc 让CEdit的宽度自适应内容的宽度。

kyoforking 2010-07-06 01:36:56
小弟想实现当CEdit的内容宽度超过其自身的宽度时,让CEdit自动变宽适应其内容
...全文
265 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunyouhao 2010-07-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wwgddx 的回复:]

这是一个如何得到精确的文字长度的问题,包括中英文,字体及字体大小都要考虑进去。
能不能通过获取光标的位置来判断文字的长度?
[/Quote]
获取光标的位置,要是光标一直在最后还好~从中间插入的话就不好整了。
向立天 2010-07-14
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
wwgddx 2010-07-06
  • 打赏
  • 举报
回复
这是一个如何得到精确的文字长度的问题,包括中英文,字体及字体大小都要考虑进去。
能不能通过获取光标的位置来判断文字的长度?
VsirSoft 2010-07-06
  • 打赏
  • 举报
回复
这个需要自绘控件实现 用系统的EDIT 确实可能存在一些问题 当然 你或许可以将(文字宽度)+(一小块宽度)来作为edit的宽度
kyoforking 2010-07-06
  • 打赏
  • 举报
回复
的确不是很精确,我之前是用的这个方法。
CRect rc;
CSize size;
HDC hDC;
HWND hWnd;
CString strTextValue;
int lenStrLen;
CFontDialog AAB;
CEdit* edit1=(CEdit*)GetDlgItem(IDC_EDITINPUT);
edit1->GetClientRect(&rc);
edit1->GetWindowText(strTextValue);
lenStrLen=edit1->GetWindowTextLength();
hDC=::GetDC(edit1->m_hWnd);
hWnd=edit1->m_hWnd;
GetTextExtentPoint(hDC,strTextValue,lenStrLen,&size);
::SetWindowPos(hWnd,HWND_TOP,rc.top,rc.left,rc.left+size.cx,rc.bottom+4,SWP_NOMOVE|SWP_NOZORDER);
::ReleaseDC(hWnd,hDC);
得到的效果和你的一样,不过你的代码看起来比我的简洁多了。
我想找要实现的效果就是像搜狗输入法打字时的那样。
Eleven 2010-07-06
  • 打赏
  • 举报
回复

CDC* pDC = m_edit.GetDC();
CString strText(_T(""));
m_edit.GetWindowText(strText);
CSize size = pDC->GetTextExtent(strText);
m_edit.ReleaseDC(pDC);
CRect rc;
m_edit.GetWindowRect(&rc);
ScreenToClient(&rc);
rc.right = rc.left + size.cx;
m_edit.MoveWindow(rc);

可能不是很精确。。。

15,979

社区成员

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

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