CScrollView problem...
Arun Kumar -- paks@arbornet.org Tuesday, October 01, 1996 Hi All, Environment : MSVC 4.0 , Windows 95 I am using CScrollView in my application, i have strange problem in = diplaying=20 the file contents in view. Problem: If the File size is greater than 2500 lines even though after = setting=20 the scroll size using setscrollsizes member function , not all the = contents are getting displayed(it's getting truncted abnormally).But if = i do GetTotolSize() i am getting the scrollrange allocated. If File size = is less than 2500 lines it's fine and no problem. To increse the scroll = size i have optimized the OnDraw code to display only in client area. Just i want to know whether any limitation on the CScrollView or any = possible=20 mistakes i am doing. I have to fix this problem as soon as possible = because we are in tight schedule. Expecting quick solution=20 bye Arun. =09
David Lowndes -- David.Lowndes@bj.co.uk Thursday, October 03, 1996 [Mini-digest: 3 responses] >Problem: If the File size is greater than 2500 lines even though after = >setting=20 >the scroll size using setscrollsizes member function , not all the = >contents are getting displayed Arun, You're more than likely running into the 32K pixel limit of CScrollView. Check if 2500*LineHeight is >=32K. If this is a major problem for you I'd abandon CScrollView (fighting it is too much trouble) and implement the functionality you need yourself in a CView derived class. Dave Lowndes -----From: "MHENRY.UMI.COM"Arun, I'm a little confused. You say you display 2500 *LINES* of a file. CScrollView's settings is in device pixels of course (assuming you use MM_TEXT). If each line is about 10 pixels, 10 * 2500 = 25,000, which is dangerously close to CScrollView's 32,000 device pixel limit. The best solution is to roll your own scroll view... assuming I have understood the problem. --matt /~~~~~~~~~~~~~~~~~~~~~~~~~~~ Matthew Henry -- UMI mhenry@umi.com (Work) mhenry1384@aol.com (Home) ~~~~~~~~~~~~~~~~~~~~~~~~~~/ -----From: ganeshs@nationwide.com Scrollbars do have a limitation on the scroll range of (I think) 32767. Now,assuming each of your lines is about 13 units high, that would allow for little more than 2500 lines. Solution? Write your own CScrollView! (see Petzold for plain-vanilla-Windows-ideas that you can apply to MFC without too much effort...) / ___| / ___| __ _ _ __ ___ ___| | I do not speak for \___ \ | | _ / _` | '_ \ / _ \/ __| '_ \ Tata Unisys or ___) | | |_| | (_| | | | | __/\__ \ | | |Nationwide Ins. |____(_) \____|\__,_|_| |_|\___||___/_| |_|------------------
John Bruno -- John_Bruno@ccm.jf.intel.com Monday, October 07, 1996 Text item: Arun If you search on MSDN for: "Scroll Bar Controls in Win32", you will find a technical article by Nancy Winnick Cluts. Athought this was origionally written about/for win32 the problem still exist in VC++ 4.x. Basically CScrollView has a internal limit of 32K for dynamic scrolling, so you need to manage it yourself. You can use 32-bit values to set the range and position of the thumb in the scroll bar. However, if you are doing real-time thumb tracking using the SB_THUMBTRACK message, Win32 will give you only 16 bits of position data. This is because the position data is returned in the HIWORD of the lParam. To get around this limitation, you need to approximate the position yourself. One way to do this is to get the current cursor position, map it to the scroll window, and calculate the position based on the ratio between the mouse position in the scroll bar window and the point within the range of the scroll bar. I would think adding this fix/patch/hach would be easier that creating a CScrollView from scratch. -- John Bruno john_bruno@ccm.jf.intel.com _____________________________ Reply Separator _____________________________ Subject: Re: CScrollView problem... Author: owner-mfc-l@majordomo.netcom.com at SMTPGATE Date: 10/3/96 9:23 AM [Mini-digest: 3 responses] >Problem: If the File size is greater than 2500 lines even though after = >setting=20 >the scroll size using setscrollsizes member function , not all the = >contents are getting displayed Arun,Text item: External Message Header The following mail header is for administrative use and may be ignored unless there are problems. ***IF THERE ARE PROBLEMS SAVE THESE HEADERS***. Reply-To: mfc-l@netcom.com Precedence: bulk Errors-To: owner-mfc-l@majordomo.netcom.com Sender: owner-mfc-l@majordomo.netcom.com Subject: Re: CScrollView problem... In-Reply-To: <01BBAFA8.A81C15C0@suhas.bflsl.soft.net> To: mfc-l@netcom.com (Non Receipt Notification Requested) Message-ID: <"Davi1003092544aa*/G=David/S=Lowndes/O=Boldon James Limited/PRMD=BJ /ADMD=TMAILUK/C=GB/"@MHS> X400-Content-Type: P2-1984 (2) X400-MTS-Identifier: [/PRMD=bj/ADMD=TMAILUK/C=GB/;sparcone-m.747:03.10.96.08.23. 17] X400-Recipients: mfc-l@netcom.com X400-Originator: David.Lowndes@bj.co.uk Date: Thu, 3 Oct 1996 09:23:18 +0100 X400-Received: by mta sparcone-mta in /PRMD=bj/ADMD=TMAILUK/C=GB/; Relayed; Thu, 3 Oct 1996 09:23:18 +0100 X400-Received: by mta gatekeeper.bj.co.uk in /PRMD=BJ/ADMD=TMAILUK/C=GB/; Relayed; Thu, 3 Oct 1996 09:28:36 +0100 From: David.Lowndes@bj.co.uk Received: by majordomo.netcom.com (8.7.5/8.7.3/(NETCOM MLS v1.01)) id IAA29408; Fri, 4 Oct 1996 08:35:44 -0700 (PDT) Received: from majordomo.netcom.com (listless.netcom.com [206.217.29.105]) by ma ilbag.jf.intel.com (8.7.6/8.7.3) with ESMTP id LAA22187; Fri, 4 Oct 1996 11:16:2 2 -0700 (PDT) Received: from mailbag.jf.intel.com (root@mailbag.jf.intel.com [134.134.248.4]) by relay.jf.intel.com (8.7.4/8.7.3) with ESMTP id LAA27567; Fri, 4 Oct 1996 11:1 4:03 -0700 (PDT) Return-Path: owner-mfc-l@majordomo.netcom.com
Kostya Sebov -- sebov@is.kiev.ua Wednesday, October 09, 1996 > [Mini-digest: 3 responses] > > >Problem: If the File size is greater than 2500 lines even though after = > >setting=20 > >the scroll size using setscrollsizes member function , not all the = > >contents are getting displayed > > Arun, > > You're more than likely running into the 32K pixel limit of CScrollView. > Check if 2500*LineHeight is >=32K. > > If this is a major problem for you I'd abandon CScrollView (fighting it > is too much trouble) and implement the functionality you need > yourself in a CView derived class. > > Dave Lowndes > -----From: "MHENRY.UMI.COM"> > Arun, > > I'm a little confused. You say you display 2500 *LINES* of a file. > CScrollView's settings is in device pixels of course (assuming you use > MM_TEXT). If each line is about 10 pixels, 10 * 2500 = 25,000, which is > dangerously close to CScrollView's 32,000 device pixel limit. The best > solution is to roll your own scroll view... assuming I have understood the > problem. > > --matt > /~~~~~~~~~~~~~~~~~~~~~~~~~~~ > Matthew Henry -- UMI > mhenry@umi.com (Work) > mhenry1384@aol.com (Home) > ~~~~~~~~~~~~~~~~~~~~~~~~~~/ > -----From: ganeshs@nationwide.com > > Scrollbars do have a limitation on the scroll range of (I think) > 32767. Now,assuming each of your lines is about 13 units high, that > would allow for little more than 2500 lines. Solution? Write your own > CScrollView! (see Petzold for plain-vanilla-Windows-ideas that you can > apply to MFC without too much effort...) > > / ___| / ___| __ _ _ __ ___ ___| | I do not speak for > \___ \ | | _ / _` | '_ \ / _ \/ __| '_ \ Tata Unisys or > ___) | | |_| | (_| | | | | __/\__ \ | | |Nationwide Ins. > |____(_) \____|\__,_|_| |_|\___||___/_| |_|------------------ > ScrollBars DO support ranges >32K (I assume Win32 of course). The culprit is the GDI under Windows 95, which is still 16-bit. Although CScrollView can be easily adapted to support long scroll ranges (about three virtual overrides), this will only make it work under NT (I tested it under 3.51 but I'm sure it'll work in 4.0). Under Win95 your CScrollView::OnPrepareDC will break being unable to SetViewportOrg to a long offset. To overcome this problem and implement correct repainting you'll have to forget OnPrepareDC and OnDraw, handle OnPaint directly and use only device coordinates (as opposed to logical ones) having offset them to GetScrollPos. --- Kostya Sebov. ---------------------------------------------------------------------------- Tel: (38 044) 266-6387 | Fax: (38 044) 266-6195 | E-mail: sebov@is.kiev.ua
Linh Huynh -- lqhuynh@earthlink.net Thursday, October 10, 1996 You can improve CscrollBar range by doing this: in SB_THUMBPOSITION thumbposition = nPos & 0xffff it will make your scrollbar range upto 64k I hope this help ---------- > From: Kostya Sebov> To: mfc-l@netcom.com > Subject: Re: CScrollView problem... > Date: Wednesday, October 09, 1996 11:52 AM > > > [Mini-digest: 3 responses] > > > > >Problem: If the File size is greater than 2500 lines even though after = > > >setting=20 > > >the scroll size using setscrollsizes member function , not all the = > > >contents are getting displayed > > > > Arun, > > > > You're more than likely running into the 32K pixel limit of CScrollView. > > Check if 2500*LineHeight is >=32K. > > > > If this is a major problem for you I'd abandon CScrollView (fighting it > > is too much trouble) and implement the functionality you need > > yourself in a CView derived class. > > > > Dave Lowndes > > -----From: "MHENRY.UMI.COM" > > > > Arun, > > > > I'm a little confused. You say you display 2500 *LINES* of a file. > > CScrollView's settings is in device pixels of course (assuming you use > > MM_TEXT). If each line is about 10 pixels, 10 * 2500 = 25,000, which is > > dangerously close to CScrollView's 32,000 device pixel limit. The best > > solution is to roll your own scroll view... assuming I have understood the > > problem. > > > > --matt > > /~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > Matthew Henry -- UMI > > mhenry@umi.com (Work) > > mhenry1384@aol.com (Home) > > ~~~~~~~~~~~~~~~~~~~~~~~~~~/ > > -----From: ganeshs@nationwide.com > > > > Scrollbars do have a limitation on the scroll range of (I think) > > 32767. Now,assuming each of your lines is about 13 units high, that > > would allow for little more than 2500 lines. Solution? Write your own > > CScrollView! (see Petzold for plain-vanilla-Windows-ideas that you can > > apply to MFC without too much effort...) > > > > / ___| / ___| __ _ _ __ ___ ___| | I do not speak for > > \___ \ | | _ / _` | '_ \ / _ \/ __| '_ \ Tata Unisys or > > ___) | | |_| | (_| | | | | __/\__ \ | | |Nationwide Ins. > > |____(_) \____|\__,_|_| |_|\___||___/_| |_|------------------ > > > > ScrollBars DO support ranges >32K (I assume Win32 of course). The culprit is > the GDI under Windows 95, which is still 16-bit. > > Although CScrollView can be easily adapted to support long scroll ranges > (about three virtual overrides), this will only make it work under NT (I > tested it under 3.51 but I'm sure it'll work in 4.0). Under Win95 your > CScrollView::OnPrepareDC will break being unable to SetViewportOrg to a long > offset. > > To overcome this problem and implement correct repainting you'll have to > forget OnPrepareDC and OnDraw, handle OnPaint directly and use only device > coordinates (as opposed to logical ones) having offset them to GetScrollPos. > > > > --- > Kostya Sebov. > ---------------------------------------------------------------------------- > Tel: (38 044) 266-6387 | Fax: (38 044) 266-6195 | E-mail: sebov@is.kiev.ua
| Вернуться в корень Архива |