一个关于SelectObject的问题

南安风语者 2006-06-29 03:55:30
我写了一个函数,当传入一个字符串后,可以根据设定的宽度让它自动换行
LONG CControlTestDlg::ModifyText( CString csInMsgText, LONG lnLabelW, CString& csOutMsgText)
{
CDC* pDc;
CWnd* pWnd;
CFont* pCf;

LONG lnMsgLen ;
LONG lnCntLen = 0;
LONG lnCntLine = 1;
lnMsgLen = csInMsgText.GetLength();

pWnd = GetDlgItem( IDC_STATICTEXT);
pDc = pWnd->GetDC();
pCf = pWnd->GetFont();
pDc->SelectObject( pCf);

for( LONG lnCnt = 0; lnCnt<lnMsgLen; lnCnt++)
{
.................
}
我在里面用了一句:pDc->SelectObject( pCf);当我把这句话去掉后,如果字体发生了改变,输出的字符却不行改变,如: 开始时,字符串“1234”的"4"后就会换行,可我把字体变大后,它还是在"4"后就会换行,我加上pDc->SelectObject( pCf)后就可以正常改变了.我虽然知道要加上这个,就是不太明白这里面的原理,特此请教各位高手!!!而且还有没有其它的方法???
...全文
193 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
南安风语者 2006-07-03
  • 打赏
  • 举报
回复
谢谢了,但是还是没有说清它的原理呀
ringphone 2006-06-29
  • 打赏
  • 举报
回复
SelectObject是把刷子,画笔,字体等选入设备,也就是把这些东东跟DC绑定,告诉系统我需要用这个字体,这个画笔等等。
南安风语者 2006-06-29
  • 打赏
  • 举报
回复
呵呵,能不能说清楚点
lixiaosan 2006-06-29
  • 打赏
  • 举报
回复
因为要计算一个字符串的范围,必须要把文字的字体选入dc,然后再计算其长度,因为字体会引起结果的变化,这有什么疑问?
南安风语者 2006-06-29
  • 打赏
  • 举报
回复
for( LONG lnCnt = 0; lnCnt<lnMsgLen; lnCnt++)
{
CString csTemp;
CString csTempNext;
CSize szTemp;
CSize szTempNext;

csTemp = csInMsgText.GetAt( lnCnt);
if ( IsDBCSLeadByte( ( BYTE)( csTemp.GetAt( 0))))
{
csTemp = csInMsgText.Mid( lnCnt,2);
lnCnt ++;
}
szTemp = pDc->GetTextExtent( csTemp);

if ( lnCnt < lnMsgLen -1)
{
csTempNext = csInMsgText.GetAt( lnCnt+1);
if ( IsDBCSLeadByte( ( BYTE)( csTempNext.GetAt( 0))))
{
csTempNext = csInMsgText.Mid( lnCnt+1,2);
}
csTempNext.Insert( 0,csTemp);
szTempNext = pDc->GetTextExtent( csTempNext) + szTemp;
}

if ( 0 == csTemp.Compare( _T("\n")))
{ // \n偺応崌
csOutMsgText += csTemp;
lnCntLen = 0;
lnCntLine ++;
}
else if ( lnLabelW < lnCntLen + szTemp.cx)
{
csOutMsgText += _T("\n") + csTemp;
lnCntLen = szTemp.cx;
lnCntLine ++;
}
else if ( lnLabelW> ( lnCntLen + szTemp.cx) &&
lnLabelW < (lnCntLen + szTempNext.cx))
{
csOutMsgText += csTemp + _T("\n");
lnCntLen = 0;
lnCntLine ++;
}
else
{
csOutMsgText += csTemp;
lnCntLen += szTemp.cx;
}
}
这是对字符串进行换行操作

15,979

社区成员

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

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