A General Purpose Ruler Control

Introduction

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 won't explain anything here. The function names are pretty intuitive, so you shouldn't have a problem running through them.

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 lowerbound of the scale (left/top for horizontal ruler and vertical ruler respectively). The lowerbound is a pixel location in the client coordinate.

short nUpperLimit

This is the partner of the lowerbound.

short nScalingFactor

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

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

The above events are fired as a result of the Mouse down, Mouse up, and Mouse move events, respectively. The nX and nY are the points in the screen coordinates and should be converted into client coordinates before they are 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 the demo for an illustration.

How to build that in C# ?

i have an MDI Project in C# .NET and want to build those Rulers. i found some samples on this site, but i didn't figure it out that i have these rulers in my dialogs :(
isn't there a simple Class like "Button, TreeView...." that i can drag the ruler on my Application ?
i use the Visual Studio .NET Enterprise Architect.
Thanks for any help

A General Purpose Ruler Control

I have the following questions about the ruler control
1) How do you obtain the value of the tab indicators that are placed on the ruler at run-time?
2) Can you adjust the edge constraints/border in code? I am referring to the left/top and right/bottom edges that can be resized at run-time.
3) Can you scale the entire ruler so that the actual distance between each increment looks larger. The ScalingFactor seems only to adjust the distance between markers, but I need to actually increase the size of the ruler.

great work but ocx will not register on NT machines, try this...

I just found that the program uses MSIMG32.DLL which is shipped with win 98/2000 but not with NT machines, so that is why it doesnot register on NT machine.
The program makes call to TransparentBlt which is defined in MSIMG32.DLL. I commented out all the TransparentBlt API call and the code runs fine... Also don't forget to remove link to msimg32.lib from project>settings>link