Scrolling limitations of CScrollView
Hugh Robinson -- hugh@ssihou.ssii.com
Tuesday, January 07, 1997
Environment: VC4.1, Win NT 4.0, SP 2.
My app allows the user to draw objects in a CScrollView and to zoom and
to scroll it.
However, I am encountering problems when zooming in. I originally had the
application make the viewport extent larger when zooming in. However, if
I zoom too far in, the distance between one logical coordinate and the
next can become say 20 pixels on the screen. This causes problems when
drawing and means that the user can't draw in the exact position that he
wants to.
I am aware of the limitation that logical coords are not allowed to
exceed 32767 on Win 95, so I find that I can't get enough zoom
magnification without this problem of the logical coords becoming visibly
spaced out on the screen. I would also like the user to be able to have
his "world" X and Y coordinates not limited to the 0-32767 range : other
drawing progs. seem to manage this!
So, the other approach I have tried is to implement my own coordinate
system and implement the zooming between my coord system and Windows'
logical coord. system in order to make sure that the logical coords do
not become too spaced out in any given window when you zoom in. This
works okay except that now I have a problem with setting up the scroll
bars on the CScrollView, since SetScrollSizes also suffers from the
limitation of a maximum of 32767 (the docs don't explicitly say so in the
CScrollView::SetScrollSizes documentation, but I tried it out with
Scribble and it does seem to be a limitation). So now I am faced with
thinking about not using CScrollView at all and rolling my own scroll
bars on a CView. This, however, seems a crazy approach since I am
throwing away all that nice CScrollView code.
So, my questions are:
(1) Am I missing something incredibly obvious?
(2) Is rolling my own own scroll bars and ditching the CScrollView code a
sensible approach?
(3) How can I give the user a coordinate system which is not limited to
the 0 - 32767 range?
Thanks
Hugh Robinson
hugh@ssihou.ssii.com
Alexander Grigoriev -- alegr@aha.ru
Wednesday, January 08, 1997
[Moderator's note: Hugh, could you please explain to everyone why
this answer isn't acceptable to you? In case anyone cares, I told
Hugh this as soon as I got his message. I should have made sure he
made this clear before this made it to the list.]
Use SetScrollInfo() and GetScrollInfo(). They don't suffer from 16 bit
limitation.
----------
> From: Hugh Robinson
> To: mfc-l
> Subject: Scrolling limitations of CScrollView
> Date: 8 СОЧБТС 1997 З. 2:50
>
>
> Environment: VC4.1, Win NT 4.0, SP 2.
>
> My app allows the user to draw objects in a CScrollView and to zoom and
> to scroll it.
>
> However, I am encountering problems when zooming in. I originally had the
> application make the viewport extent larger when zooming in. However, if
> I zoom too far in, the distance between one logical coordinate and the
> next can become say 20 pixels on the screen. This causes problems when
> drawing and means that the user can't draw in the exact position that he
> wants to.
>
> I am aware of the limitation that logical coords are not allowed to
> exceed 32767 on Win 95, so I find that I can't get enough zoom
> magnification without this problem of the logical coords becoming visibly
> spaced out on the screen. I would also like the user to be able to have
> his "world" X and Y coordinates not limited to the 0-32767 range : other
> drawing progs. seem to manage this!
>
[skip]
>
> Thanks
> Hugh Robinson
> hugh@ssihou.ssii.com
Hugh Robinson -- hugh@ssihou.ssii.com
Thursday, January 16, 1997
I had mis-interpreted the moderator's original message to me and hadn't
realized that he meant that SetScrollInfo() and GetScrollInfo() don't
suffer from a 16 bit limitation. I will try it!
Thanks for your help.
Hugh Robinson
----------
From: owner-mfc-l
Sent: Wednesday, January 08, 1997 10:12 PM
To: mfc-l
Subject: Re: Scrolling limitations of CScrollView
[Moderator's note: Hugh, could you please explain to everyone why
this answer isn't acceptable to you? In case anyone cares, I told
Hugh this as soon as I got his message. I should have made sure he
made this clear before this made it to the list.]
Use SetScrollInfo() and GetScrollInfo(). They don't suffer from 16 bit
limitation.
----------
> From: Hugh Robinson
> To: mfc-l
> Subject: Scrolling limitations of CScrollView
> Date: 8 СОЧБТС 1997 З. 2:50
>
>
> Environment: VC4.1, Win NT 4.0, SP 2.
>
> My app allows the user to draw objects in a CScrollView and to zoom and
> to scroll it.
>
> However, I am encountering problems when zooming in. I originally had
the
> application make the viewport extent larger when zooming in. However,
if
> I zoom too far in, the distance between one logical coordinate and the
> next can become say 20 pixels on the screen. This causes problems when
> drawing and means that the user can't draw in the exact position that
he
> wants to.
>
> I am aware of the limitation that logical coords are not allowed to
> exceed 32767 on Win 95, so I find that I can't get enough zoom
> magnification without this problem of the logical coords becoming
visibly
> spaced out on the screen. I would also like the user to be able to have
> his "world" X and Y coordinates not limited to the 0-32767 range :
other
> drawing progs. seem to manage this!
>
[skip]
>
> Thanks
> Hugh Robinson
> hugh@ssihou.ssii.com
| Вернуться в корень Архива
|