Re: Minor artefact with CScrollWindowImpl...
Nenad Stefanović <[email protected]> Sun, 3 Jun 2012 23:26:47 -0700
| Newsgroups | gmane.comp.windows.wtl |
|---|---|
| Message-ID | <CAK3Hp+-jwmoX95tGtrywFMOC02yVswt+1pM8_v4XF0wT16O_FA@mail.gmail.com> |
Hi Philippe, Thank you for pointing this out. Your solution is what should be there, so I will add it to the WTL code. Thanks, Nenad On Sat, Jun 2, 2012 at 9:28 AM, Philippe <[email protected]> wrote: > ** > > > Hi Nenad, > > I have controls derived from 'CScrollWindowImpl<MyControl, CFSBWindow>' > and particularly a DataGrid. > I noticed that when I turned my mouse's wheel (even if I dont need to > scroll) some parts of my control were flickering. > So I checked the atlscrl.h file's code, more precisely CScrollImpl and the > OnMouseWheel handler (line #491 for the latest version of WTL) and found > this: > > if(m_sizeAll.cy > m_sizeClient.cy) > { > for(int i = 0; i < zTotal; i += WHEEL_DELTA) > { > pT->DoScroll(SB_VERT, nScrollCode, (int&)m_ptOffset.y, m_sizeAll.cy, > m_sizePage.cy, m_sizeLine.cy); > pT->UpdateWindow(); > } > } > else // can't scroll vertically, scroll horizontally > { > for(int i = 0; i < zTotal; i += WHEEL_DELTA) > { > pT->DoScroll(SB_HORZ, nScrollCode, (int&)m_ptOffset.x, m_sizeAll.cx, > m_sizePage.cx, m_sizeLine.cx); > pT->UpdateWindow(); > } > } > > This code means that if the mouse's wheel is turned then > if(m_sizeAll.cy > m_sizeClient.cy) > it will scroll vertically and update (repaint) the client rect of the > control > else > it will scroll horizontally and update (repaint) the client rect of the > control > > Which is by the way a very good idea. > > But before scrolling horizontally (and update the window) we have to check > if it is necessary and it is necessary only > if(m_sizeAll.cx > m_sizeClient.cx) as there's no reason to scroll > horizontally if the control width is not larger than the client width ;o) > > I modified it like this: > > if(m_sizeAll.cy > m_sizeClient.cy) > { > for(int i = 0; i < zTotal; i += WHEEL_DELTA) > { > pT->DoScroll(SB_VERT, nScrollCode, (int&)m_ptOffset.y, m_sizeAll.cy, > m_sizePage.cy, m_sizeLine.cy); > pT->UpdateWindow(); > } > } > else // can't scroll vertically, scroll horizontally > { > if(m_sizeAll.cx > m_sizeClient.cx) > { > for(int i = 0; i < zTotal; i += WHEEL_DELTA) > { > pT->DoScroll(SB_HORZ, nScrollCode, (int&)m_ptOffset.x, m_sizeAll.cx, > m_sizePage.cx, m_sizeLine.cx); > pT->UpdateWindow(); > } > } > } > > and everything is perfect with my Grid, no more flickering! > > I know it's a minor problem but this flickering was so annoying so I hope > it helps. > Long live WTL and all the best to you and the WTL team. > > Philippe Marechal > > > [Non-text portions of this message have been removed] ------------------------------------ Yahoo! Groups Links <*> To visit your group on the web, go to: http://groups.yahoo.com/group/wtl/ <*> Your email settings: Individual Email | Traditional <*> To change settings online go to: http://groups.yahoo.com/group/wtl/join (Yahoo! ID required) <*> To change settings via email: [email protected] [email protected] <*> To unsubscribe from this group, send an email to: [email protected] <*> Your use of Yahoo! Groups is subject to: http://docs.yahoo.com/info/terms/