代码:CEdit *pEdit;
int len;
CString message;
...
len = pEdit->GetWindowTextLength();
pEdit->SetSel(len, len, FALSE);
pEdit->ReplaceSel(message);
...CEdit有滚动条,这段代码能在CEdit末尾添加文本,文本添加后能自动滚动到最末尾,我想能控制它不自动滚动?怎么办?
我改了 pEdit->SetSel(len, len, TRUE); 没用,还是自动滚屏

解决方案 »

  1.   

    你创建*pEdit时,
    要注意属性:
    virtual BOOL Create(
       DWORD dwStyle, // ~ES_AUTOHSCROLL   
       const RECT& rect,
       CWnd* pParentWnd,
       UINT nID 
    );
      

  2.   

    我是想在运行时来控制CEdit的自动滚动,而不是创建时。
    这样可以让用户来决定自动滚屏还是手动滚屏
      

  3.   

    用pEdit->SetSel(); 的时候,用两次,一次选的前一点,让它滚回去,再一次用的时候,选择你要的那段。
      

  4.   

    用pEdit->SetSel(); 的时候,用两次,一次选的前一点,让它滚回去,再一次用的时候,选择你要的那段。
    ---------------------------------------------------------------------
    楼上的这种方法不是最终解决之道呀,况且我只是想界面在接受文本的时候,用户控制(比如单击右键就停止滚动,再单击就开始自动滚屏),里面的滚动条位置应该很自然的停在它原始的位置上,否则可能会闪屏的。
      

  5.   

    "我是想在运行时来控制CEdit的自动滚动,而不是创建时。
    这样可以让用户来决定自动滚屏还是手动滚屏"
    ---------------------------------------------------------
    用这个修改属性:
    LONG SetWindowLong(pEdit->GetSafehWnd(),
        GWL_STYLE,
        ....
    );
    MSDN:
    To change this style after the control has been created, use SetWindowLong.
      

  6.   

    多谢楼上的大哥
    按照你提供的方法:
    ::SetWindowLong(pEdit->GetSafeHwnd(), GWL_STYLE, pEdit->GetExStyle() | ~ES_AUTOHSCROLL);好像也不灵,屏幕似乎没有及时刷新还有我在PreCreateWindow中一直设置的是不自动滚动的
    BOOL CMyAppView::PreCreateWindow(CREATESTRUCT& cs)
    {
    // TODO: Modify the Window class or styles here by modifying
    //  the CREATESTRUCT cs BOOL bPreCreated = CEditView::PreCreateWindow(cs);
    cs.style &= ~(ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_HSCROLL);
    return bPreCreated;
    }
      

  7.   

    ::SetWindowLong(pEdit->GetSafeHwnd(), GWL_STYLE, pEdit->GetExStyle() | ~WS_HSCROLL);
      

  8.   


    ::SetWindowLong(pEdit->GetSafeHwnd(), GWL_STYLE, pEdit->GetStyle() | ~WS_HSCROLL);
      

  9.   

    发现只要具有垂直滚动条 然后用 pEdit->ReplaceSel(tmp);来添加文本,无论ES_AUTOVSCROLL 怎么设,CEdit都会自己滚动,我现在肯定是需要滚动条的,但是希望在添加文本的时候控制滚动与否。