码迷,mamicode.com
首页 > 编程语言 > 详细

MFC 编辑框专辑

时间:2016-07-12 13:54:32      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

在自动换行设置的时候,要在EDIT控件的属性中选中"multiline"的属性和Auto_HScroll、Vertical scroll。

经过多次测试,总结出VC编辑框(EDIT)的自动换行与自动滚屏的方法。

方法一: (当EDIT映射到一CString时)
m_String = m_String + sNewString + "\r\n"   

//自动换行(其中m_String是EDIT筐所关联的CString对象)
UpdateData(false);

此法只能做到自动换行,不会自动滚屏到最后一行。

方法二: (当EDIT映射到一EDIT时)
m_Edit.SetSel(-1, -1);       //自动滚屏(其中m_Edit是EDIT筐所关联的EDIT控制对象)
m_Edit.ReplaceSel(sNewString+"\r\n");    //自动换行

此法可以做到自动换行,并自动滚屏到最后一行。

以上,m_String、m_Edit.分别为给编辑框添加的成员变量;sNewString 为要显示的字符串

方法三: 到200行时将所有内容清空

 1 int iLineNum=m_EditLog.GetLineCount();
 2      if(iLineNum<=200)
 3      {
 4       m_EditLog.SetSel(-1, -1);
 5       m_EditLog.ReplaceSel(str+"\r\n\r\n");
 6      }   
 7      else
 8      {
 9       m_EditLog.SetSel(0, -1);
10       m_EditLog.Clear();
11     
12      }

 

取自msdn

void SetSel( int nStartChar, int nEndChar, BOOL bNoScroll = FALSE );

Parameters

nStartChar

Specifies the starting position. If nStartChar is 0 and nEndChar is –1, all the text in the edit control is selected. If nStartChar is –1, any current selection is removed.

nEndChar

Specifies the ending position.

http://www.pcming.com/studio/showart.asp?id=443

----------------------------------

------------------------------------------------------

VC中EditBox怎么自动清空???http://topic.csdn.net/u/20080311/16/70b6c4af-0a1f-418c-b4d0-bb336ababb9b.html

--------------------------------------------------------

【MFC】关于EditBox中滚动条定位问题

一般来说,如果EditBox中的内容是静态的,那么可以根据属性很容易地滑动滚动条。
   (对于Dialog 来说可以设置其属性)
   但是,如果EditBox中的内容是动态刷新的,那么每一次refresh后,滚动条(无论是水
平的,还是垂直的)都会重新定位在开始的位置。
    所以,如果想要让每次刷新时,滚动条的位置保留不动,那么就需要作些处理。
-------------------------------------------------------------------------
例如:
 1 //计时器,让它每隔一定时间就刷新一次EditBox中的内容。
 2 void XXX::OnTimer(UINT_PTR nIDEvent)
 3 {
 4         //设定要输出的内容
 5        CString str;
 6        m_str +="Line ==";
 7        m_nLineCount++;
 8        str.Format( "M", m_nLineCount );
 9        m_str += str + "==";
10        m_str +="01234567890123456789012345678901234567890123456789\r\n";
11 
12        //获取刷新前,水平滚动条和垂直滚动条的位置
13         m_position.x = m_edit1.GetScrollPos( SB_HORZ ); 
14        m_position.y = m_edit1.GetScrollPos( SB_VERT );
15 
16        //获取水平滚动条的滚动范围
17        m_edit.GetScrollRange( SB_HORZ, &m_nMinHScroll , &m_nMaxHScroll );
18        m_flag++;
19        if( m_flag == 1 )
20        {
21                 //获取第一行字符个数
22                 maxLen = m_str.GetLength();
23        }
24 
25         //刷新EditBox中的内容
26        m_edit.SetWindowTextA( m_str );
27       //设定水平和垂直滚动条的位置(刷新前的位置)
28       if( m_nMaxHScroll != m_nMinHScroll )
29      {
30                 //这步换算直接影响到是否能定位水平滚动条刷新前的位置
31                 int nChar = ( maxLen * m_position.x ) / (m_nMaxHScroll - m_nMinHScroll);
32                 m_edit1.LineScroll( m_position.y, nChar );
33       }
34       else
35      {
36                 m_edit1.LineScroll( m_position.y );
37      }
38      CDialog::OnTimer(nIDEvent);
39 }

----http://huagx770.spaces.live.com/blog/cns!C2B50FE280E36778!266.entry

简单说明一下,由于CEditBox::LineScroll()函数是可以设置滚动内容的,但是由于其第2

个参数(一般情况下是缺省的)要求传入的是字符个数,即:将要水平滚动的字符个数,所以要
进行一下换算:
    nChar = ( maxLen * m_position.x ) / (m_nMaxHScroll - m_nMinHScroll);
即可。-----------------------------------------------------
 

MFC 编辑框专辑

标签:

原文地址:http://www.cnblogs.com/it-duit/p/5663041.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!