Solved

Add text to cedit without scrolling

Posted on 1998-10-22
9
921 Views
Last Modified: 2013-11-20
I have a ceditview that has text continually added to the end(1 line of text at a time).  Well I would like to disable the scrolling when the last line of the edit control is not in view but still add the text to the end.  I noticed SetSel has a no scroll flag, but it's too bad ReplaceSel doesn't.

Does anyone know a way to accomplish this?

-Thankx
0
Comment
Question by:areams
9 Comments
 
LVL 8

Expert Comment

by:Answers2000
ID: 1323712
Use GetSel to get the old pos

Use SetWindowText to set the new text (GetWindowText gives you the old text)

Use SetSel to put the cursor where you want (e.g. back to the old pos)
0
 

Author Comment

by:areams
ID: 1323713
Thanks for the quick response but unfortunately this causes the same problem except in the opposite direction.  This now causes the scroll bar to "fight" it's way to the very top position each time a line of text is added  as opposed to the bottom.  I had considered this method before but I assumed it would produce too much flicker.  I need the edit control and scrollbar to maintain the exact same position if the last line is not visible(although scroll bar slider should shrink as more text is added).  Any more suggestions or am I doing something wrong?  Thanks again.
0
 
LVL 7

Expert Comment

by:psdavis
ID: 1323714
Flicker, that's an easy one...

Before the call, add an extra line:

SetRedraw( FALSE );

GetSel
SetWindowText
SetSel

SetRedraw( TRUE );

Phillip
0
 

Author Comment

by:areams
ID: 1323715
Thanks, that helped with the flicker.  now if only that scrollbar slider would stay put...
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 7

Expert Comment

by:psdavis
ID: 1323716
Turn off the scroll bar slider as well!  It's a window too!

Phillip
0
 

Expert Comment

by:rakeshkalra
ID: 1323717
When u add a text to edit control or view, there are two situations:
1) Your edit control or view has the focus: In this case the scroll bar scrolls to the last line added.
2) the edit ctrl or view doesn't have focus: In this case the scroll bar retains its position and just shrinks in size.

Now you need to remove the focus from your credit view and then call SetSel and ReplaceSel

HWND hWnd = ::SetFocus(NULL);
// Instead of NULL if you some hWnd (other than Credit view)
// where u can set the focus, u can use that

//Now here u call SetSel and ReplaceSel

// put the focus back to the original window
::SetFocus(hWnd);

I hope this solves your problem.

Regards,

Rakesh
0
 

Author Comment

by:areams
ID: 1323718
I tried to set the focus to NULL and to the mainframe but I couldn't seem to get it to work.  I have also tried disabling the scrollbar using EnableScrollBarCtrl but unfortunately ReplaceSel just reenables it.  Thanks though...
0
 
LVL 11

Accepted Solution

by:
mikeblas earned 150 total points
ID: 1323719
You can't avoid the scroll bar moving.  The scroll bar will resize, because the content of the window is growing.  The scroll bar has to show the relative size of the information in the window.

The scroll bar will also move towards the top of the window (if you're adding text at the end) beause the relative position of the current view is changing, too. It's becoming closer to the beginning of the control with more data in the control.

Think of a scroll bar that's 100 pixels high. If you're looking at line 20, and there's 50 lines in the control, your scroll bar should be at (20/50)*100, which is 40.  If you add 50 lines, the scroll bar needs to start at (20/100)*100, which is 20.  The ratio changes because you're adding text!

You're asking for the impossible. You can minimize the repainting the way other folks here have told you to. You can hack around with the control to try to set the scroll info yourself to make the control not resize or move the bar.  That might work, but it breaks the Windows user interface (which says that the scroll bar should show the relative range and position).  If you really must have it your way, you'll need to write your own control.

B ekiM

0
 

Author Comment

by:areams
ID: 1323720
Its not what I wanted to hear but thats the way things go.  I am working on my own control now.  Thanks Mike and everyone else who contributed!

-Aaron
0

Featured Post

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

Introduction: Ownerdraw of the grid button.  A singleton class implentation and usage. Continuing from the fifth article about sudoku.   Open the project in visual studio. Go to the class view – CGridButton should be visible as a class.  R…
If you use Adobe Reader X it is possible you can't open OLE PDF documents in the standard. The reason is the 'save box mode' in adobe reader X. Many people think the protected Mode of adobe reader x is only to stop the write access. But this fe…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

747 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now