• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 398
  • Last Modified:

Drag & Drop in a CScrollView

I'm implementing my own drag and drop of bitmaps in a CScrollView window. Right now I redraw the entire view for each movement, but this is not a good solution since I'm going to have quite a lot of graphics in this window. What is the most efficient way to do this? Can I somehow read a section of the view into memory, draw my bitmap there, and the next time redraw only that section and so on.
0
zingo
Asked:
zingo
1 Solution
 
eugenemCommented:
First thing you need is clipping. This means you need to repaint only what you need, not the whole view. For example, when you drag a bitmap, you take previous rectangle of the bitmap and current rectangle of bitmap and compute the smallest rectangle that contains both of these. Then you set this rectangle as a clipping rectangle and draw your view. It will automatically prevent any output to any place of your DC outside this rectangle.
To set clipping rectangle you can use
void CWnd::InvalidateRect( LPCRECT lpRect, BOOL bErase = TRUE );
If you want to get this rectangle from OnPaint, use
CPaintDC dc( this );
CRect rectUpdate;
dc.GetClipBox(&rectUpdate);

If you want some more serious clipping you can use CDC::SelectClipRgn. You should also look for CRgn.

0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now