MFC中Static text怎样判断控件中的字符串是否超出控件的宽度。100分求解。
MFC中Statictext怎样判断控件中的字符串是否超出控件的宽度。也就是说当我设置了wordellipsis的属性为true时,如果字符串的长度超出控件的宽度,就会自...
MFC中Static text怎样判断控件中的字符串是否超出控件的宽度。也就是说当我设置了word ellipsis的属性为true时,如果字符串的长度超出控件的宽度,就会自动以...来结尾。
那么怎么判断字符串是以...来结尾的,还是正常显示的。也就是长度超没超。
由于这个是微软封装好的,所以不知道到底怎么实现,求大神。100分虽少,但是诚心啊。只能悬赏100分,上限了,悲剧。
我使用CDC的方法获取字符串的宽度,发现不是非常准确。有时没超过但计算却是超过。您帮我看下。CDC *pDC = GetDlgItem( IDC_LOCATION )->GetDC();CSize size = pDC->GetTextExtent( m_cstrDirectory );GetDlgItem( IDC_LOCATION )->ReleaseDC( pDC );CRect rect;GetDlgItem( IDC_LOCATION )->GetWindowRect(&rect);if(size.cx>rect.Width()) //不知道是不是这里有问题,毕竟一个是long一个是int
这个是没超出,但是结果tooltip出来了,tooltip出来的条件就是if(size.cx>rect.Width()) 展开
那么怎么判断字符串是以...来结尾的,还是正常显示的。也就是长度超没超。
由于这个是微软封装好的,所以不知道到底怎么实现,求大神。100分虽少,但是诚心啊。只能悬赏100分,上限了,悲剧。
我使用CDC的方法获取字符串的宽度,发现不是非常准确。有时没超过但计算却是超过。您帮我看下。CDC *pDC = GetDlgItem( IDC_LOCATION )->GetDC();CSize size = pDC->GetTextExtent( m_cstrDirectory );GetDlgItem( IDC_LOCATION )->ReleaseDC( pDC );CRect rect;GetDlgItem( IDC_LOCATION )->GetWindowRect(&rect);if(size.cx>rect.Width()) //不知道是不是这里有问题,毕竟一个是long一个是int
这个是没超出,但是结果tooltip出来了,tooltip出来的条件就是if(size.cx>rect.Width()) 展开
4个回答
展开全部
越是这样的返嫌碧小问题越是难以解决。如果字符串是单一的中文字符,或者ascii字符还好点,如果混合的话,需要分别计算每个字符的宽度。可以用api获得字符的者碰宽度。不愿意用的话自己粗略计算一下也可以。
以静态文本控件m_txt为例(其他控件要考虑漏举边缘空白)用静态文本控件正好容纳1000个中文字符的情况下来计算中文字符所占宽度,其他字符类似。
然后在程序中就可以通过计算字符串整体宽度与控将窗口宽度(m_txt->GetClientRect或 m->txtGetWidnowRect)相比较来判断了.
字符串可以通过getwindowtext来获得
以静态文本控件m_txt为例(其他控件要考虑漏举边缘空白)用静态文本控件正好容纳1000个中文字符的情况下来计算中文字符所占宽度,其他字符类似。
然后在程序中就可以通过计算字符串整体宽度与控将窗口宽度(m_txt->GetClientRect或 m->txtGetWidnowRect)相比较来判断了.
字符串可以通过getwindowtext来获得
追问
你好,我测试了下,发现这个方法不是很准确啊。问题我补充了,可以看上面。有截图
展开全部
其它的我还没怎么探究,不过确实有个可以获取宽度的方法。
假设你关联控件变量m_text
CString text;
m_text.GetWindowText(text);
CDC *pDC = m_text.GetDC();
CSize size = pDc->GetTextExtent(text);
m_text->ReleaseDC(pDC);
//size就哪模是字符串输出时的长宽链陆,你拿它和文本框大小比较李唤缓下。
注:大于了文本框应该就会...结尾,小于则不会。
假设你关联控件变量m_text
CString text;
m_text.GetWindowText(text);
CDC *pDC = m_text.GetDC();
CSize size = pDc->GetTextExtent(text);
m_text->ReleaseDC(pDC);
//size就哪模是字符串输出时的长宽链陆,你拿它和文本框大小比较李唤缓下。
注:大于了文本框应该就会...结尾,小于则不会。
追问
您好,非常感谢您。我测试了您的方法,发现不是非常准确。有时没超过但计算却是超过。您帮我看下。
CDC *pDC = GetDlgItem( IDC_LOCATION )->GetDC();
CSize size = pDC->GetTextExtent( m_cstrDirectory );
GetDlgItem( IDC_LOCATION )->ReleaseDC( pDC );
CRect rect;
GetDlgItem( IDC_LOCATION )->GetWindowRect(&rect);
if(size.cx>rect.Width()) //不知道是不是这里有问题,毕竟一个是long一个是int
追答
嗯,我是默认你使用static text默认的字体的。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
函数获取字体大小,用Getwindowrect获取控件大小,一比较就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询