Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

A general purpose ruler control

0.00/5 (No votes)
13 May 2002 1  
This is a demostration of a general purpose ruler control in use. It consist of 2 apps and the ActiveX control itself. Control code is included.

Sample Image - ruler_control.jpg

Introduction

After enduring enough abuse from some people on this site for not including the source in my last article, I guess they have succeeded. Here it is, with source, and all you codeheads have wanted. The sample has no executable so the source would have to be compiled. VC++6.0 automatically registers the control. Below is a list and description of the interfaces and how they may be utilized. The ruler itself consists of one CWnd derived class CScale. The implementation is about 2000 lines of code, so I wont be explaining anything here. The function names are pretty intuitive, so u shouldn't have a problem running through them.

void SetRulerInfo(short nLowerLimit,short nUpperLimit,
  short nScalingFactor,BOOL bHorz,BOOL  b3DLook,BOOL AutoResize);

This is the only method I thought needed explaining, as you can see, the rest are just getter and setter methods, with the exception of the message senders (which I'll get to soon). This method is used to set the properties of the ruler at run time in one atomic operation. The parameters are explained as follows:

short nLowerLimit

As the name suggests, sets the lower bound of the scale (left/top for horizontal ruler and vertical ruler respectively). The lower bound is a pixel location in client coordinate.

short nUpperLimit

This is the partner of the lower bound.

short nScalingFactor

The scaling factor determines what interval is used to draw major and minor tickers. In the sample, 5 is used. See demo for illustration.

BOOL bHorz

TRUE to create a horizontal ruler (default). FALSE for vertical.

BOOL  b3DLook

TRUE for 3D borders (default). FALSE for flat. See demo.

BOOL bAutoResize

This feature allows the ruler's scale to be resized at runtime without calling the setter methods. When on, resize handles appear at the side of the ruler. These are just setter and getter methods for the above properties.

void SetLowerLimit(short nLowerLimit);
void SetUpperLimit(short nUpperLimit);
void SetScalingFactor(short nScalingFactor);
void SetLook(BOOL bLook3D);
void SetAlignment(BOOL bHorz);
void SetAutoResize(BOOL bAutoResize);
short GetLowerLimit();
short GetUpperLimit();
short GetScalingFactor();
BOOL IsHorzAligned();
BOOL Has3DBorders();

Mouse event firers

void StartTracking(short nFlag, OLE_XPOS_PIXELS nX, OLE_YPOS_PIXELS nY);
void StopTracking(short nFlags, OLE_XPOS_PIXELS nX, OLE_YPOS_PIXELS nY);
void Track(short nFlags, OLE_XPOS_PIXELS nX, OLE_YPOS_PIXELS nY);

The above events are fired as a result of the mouse down, mouse up, and mouse move events respectively. nX and nY are the points in screen coordinates and should be converted into client coordinates before used. The nFlag is used to indicate which scaler is being used, 0 for regular arrow movement, 1 for left bar and 2 for right bar. See demo for illustration.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here