ROP Codes, Rubber Bands, Clip Regions '& Coordinate Transforms | CodeGuru

ROP Codes, Rubber Bands, Clip Regions ‘& Coordinate Transforms

Environment: VC6, 95/98/NT Skill Level: Beginner, Intermediate   This sample shows how to: 1. track the mouse using CWnd messages     WM_LBUTTONDOWN — use this message to start tracking the mouse motions, and save the starting point for drawing a rubber band rectangle     WM_LBUTTONUP — use this message to end mouse tracking and end […]

Written By
CodeGuru Staff
CodeGuru Staff
Apr 13, 1999
2 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Environment: VC6, 95/98/NT

Skill Level: Beginner, Intermediate  

This sample shows how to:

1. track the mouse using CWnd messages

  •     WM_LBUTTONDOWN — use this message to
    start tracking the mouse motions, and save the starting
    point for drawing a rubber band rectangle
  •     WM_LBUTTONUP — use this message to
    end mouse tracking and end drawing
  •     WM_MOUSEMOVE — use this message to
    draw a rectangle and update the x-y coordinate readout

2. draw a "rubber band" rectangle

On occasion you will need to draw a selection rectangle to
select a group of drawing objects. This example project shows one
way to do this efficiently in the WM_MOUSEMOVE handler. As the
rectangle is stretched with the mouse, the old rectangle is
erased and new one drawn using a special ROP2 code for the device
context.

3. use ROP2 drawing codes

There are several ROP2 device context drawing codes available,
and you can experiment with each code by selecting from the Mode
menu. The most interesting codes for rubber band rectangles are
R2_NOT and R2_NOTXORPEN. Play with all of them to see the results
of the logical operations combining new and existing pixels.

4. draw in logical units
5. reorient the coordinate system and logical origin

Occasionally you may want to plot data using you own
coordinate system. The sample changes the device context mapping
mode to a 1st quadrant cartesian coordinate system. It’s a useful
technique if you want to plot x-y graph data in user units.
MM_ISOTROPIC is used so that the drawings aspect ratio is
preserved as the window is resized.

void CRopFunView::SetDCProperties(CDC *pDC)
{
   CRect r;
   GetClientRect(r);

   pDC->SetMapMode(MM_ISOTROPIC );
   pDC->SetWindowExt( XEXTENTS_LOGICALUNITS, -YEXTENTS_LOGICALUNITS );
   pDC->SetViewportExt( r.Width(), r.Height() );
   pDC->SetViewportOrg( 0, r.Height() );
   pDC->SetWindowOrg( -XORIGIN_LOGICALUNITS, -YORIGIN_LOGICALUNITS );
} 

6. clip drawing outside a window region  

Some of the MFC classes and methods demonstrated are:

CDC:

  • SetMapMode
  • WindowExt
  • SetViewportExt
  • SetViewportOrg
  • SetWindowOrg
  • MoveTo
  • LineTo
  • Rectangle
  • SetBkMode
  • TextOut
  • SelectObject
  • DPtoLP
  • GetClipBox

CRgn:

  • CreateRectRgn
  • CreateRectRgnIndirect

Running the sample: Use the left mouse button to drag a
rectangle inside the gray rectangle. Select different ROP2 codes
from the menu.  

Download demo project – 21 Kb

Download source – 9 Kb

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.