代码:CEdit *pEdit;
int len;
CString message;
...
len = pEdit->GetWindowTextLength();
pEdit->SetSel(len, len, FALSE);
pEdit->ReplaceSel(message);
...CEdit有滚动条,这段代码能在CEdit末尾添加文本,文本添加后能自动滚动到最末尾,我想能控制它不自动滚动?怎么办?
我改了 pEdit->SetSel(len, len, TRUE); 没用,还是自动滚屏
int len;
CString message;
...
len = pEdit->GetWindowTextLength();
pEdit->SetSel(len, len, FALSE);
pEdit->ReplaceSel(message);
...CEdit有滚动条,这段代码能在CEdit末尾添加文本,文本添加后能自动滚动到最末尾,我想能控制它不自动滚动?怎么办?
我改了 pEdit->SetSel(len, len, TRUE); 没用,还是自动滚屏
要注意属性:
virtual BOOL Create(
DWORD dwStyle, // ~ES_AUTOHSCROLL
const RECT& rect,
CWnd* pParentWnd,
UINT nID
);
这样可以让用户来决定自动滚屏还是手动滚屏
---------------------------------------------------------------------
楼上的这种方法不是最终解决之道呀,况且我只是想界面在接受文本的时候,用户控制(比如单击右键就停止滚动,再单击就开始自动滚屏),里面的滚动条位置应该很自然的停在它原始的位置上,否则可能会闪屏的。
这样可以让用户来决定自动滚屏还是手动滚屏"
---------------------------------------------------------
用这个修改属性:
LONG SetWindowLong(pEdit->GetSafehWnd(),
GWL_STYLE,
....
);
MSDN:
To change this style after the control has been created, use SetWindowLong.
按照你提供的方法:
::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;
}
::SetWindowLong(pEdit->GetSafeHwnd(), GWL_STYLE, pEdit->GetStyle() | ~WS_HSCROLL);