Click here to Skip to main content
Click here to Skip to main content

Ruler Control

, 30 Sep 2002
Rate this:
Please Sign up or sign in to vote.
Custom CRulerWnd control
<!-- Article image -->

Sample Image - CRulerProject001.jpg

<!-- Add the rest of your HTML here -->

Introduction

This control is derived from MFC's CWnd class. While you are adding this to your dialogbox, you should select "custom control", whose class name should be CRulerWnd, else, you can't create this control. This control can be located in any dialogbox or View. The RegisterWindowClass() member function will register this window class to Windows. After that, you will not have any problem when you create it. The class will be unregistered in the destructor member function.

Details

#define RULERWINDOW_CLASSNAME  _T( "CRulerWnd" )


    WNDCLASS wndcls;

    HINSTANCE hInst = AfxGetResourceHandle();

    if ( !( ::GetClassInfo( hInst, RULERWINDOW_CLASSNAME , &wndcls ) ) )
    {

       // otherwise we need to register a new class
       wndcls.style            = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
       wndcls.lpfnWndProc      = ::DefWindowProc;
       wndcls.cbClsExtra       = wndcls.cbWndExtra = 0;
       wndcls.hInstance        = hInst;
       wndcls.hIcon            = NULL;
#ifndef _WIN32_WCE_NO_CURSOR
       wndcls.hCursor          = AfxGetApp()->LoadStandardCursor(IDC_ARROW);
#else
       wndcls.hCursor          = 0;
#endif                    
       wndcls.hbrBackground    = (HBRUSH)( COLOR_3DFACE + 1 );
       wndcls.lpszMenuName     = NULL;
       wndcls.lpszClassName    = RULERWINDOW_CLASSNAME;
        
       if( !AfxRegisterClass( &wndcls ) )
       {

          AfxThrowResourceException();
          return FALSE;

       }

    }

You can select your window styles what you want. For instance, WS_EX_MODALFRAME, WS_EX_STATICEDGE etc. to create for miscellaneous appearance. This control has a lot of member functions for setting it up. You can use them to change colors and other things.

  //Get Property
  DWORD        GetStyle() { return m_dwStyle; }
  COLORREF     GetBackGroundColor() { return m_clrBackGround; }
  COLORREF     GetMilimeterLineColor() { return m_clrMilimeterLineColor; }
  COLORREF     GetTextColor() { return m_clrTextColor; }
  UINT         GetStartSeperateSize() { return m_nSeperateSize; }
  UINT         GetMargin() { return m_nRulerMargin; }
  UINT         GetMilimeterPixel() { return m_nMilimeterPixel; }
  UINT         GetSeperatorSize() { return m_nSeperatorSize; }
  long         GetScrollPos() { return m_lScrolPos; }
  CWnd*      GetMessageTarget() { return m_pMessageTarget; }


  //Set Property
  BOOL     SetStyle( DWORD dwStyle );
  BOOL     SetBackGroundColor( COLORREF clr );
  BOOL     SetMilimeterLineColor( COLORREF clr );
  BOOL     SetTextColor( COLORREF clr );
  BOOL     SetStartSeperateSize( UINT nSize );
  BOOL     SetMargin( UINT nMargin );
  BOOL     SetMilimeterPixel( UINT nPixel );
  BOOL     SetSeperatorSize( UINT nSize );
  BOOL     SetScrollPos( long lPos );
  BOOL     SetMessageTarget( CWnd *pTarget = NULL );
Additionaly, you can add a separator, delete it, change position etc.
SEPERATOR_TYPE* GetSeperator( int iID );
int DeleteAllSeperator();
int DeleteSeperator( int iID );
int AddSeperator( int iPos , int iID , int iType = 0 , 
   LPARAM lParam = NULL ,
   COLORREF  clrLine = RGB( 0 , 0 , 0 ) ,                                    
   COLORREF clrFill = RGB( 255 ,255 , 220 ) , 
   int iMinMargin = 0 , int iMaxMargin = 0xFFFFFFF ); 
For taking separators, use CPtrArray collection.
  typedef struct _tagSEPERATOR_TYPE{

     int      iPos;
     int      iType;
     int      iID;
     COLORREF  clrLine;
     COLORREF  clrFill;

     int      iMinMargin;
     int      iMaxMargin;

     LPARAM lParam;  

  }SEPERATOR_TYPE;

This structure is separate and to the point for each separator above. Additionaly, you can set up each separator which can have color, position, id number and motion zone. These are shown as below. All notifications can be sent to whichever window will be the target. This notification is as below:

//Main Message
#define  NM_RULER_NOTIFICATIONMESSAGE   0x1112

//Sub Notification Message
#define  NMSUB_RULER_SEPERATORCHANGE    0x0001
#define  NMSUB_RULER_SEPERATORCHANGING  0x0002

  typedef struct _tagRULERWNDNOTIFY_INFO{

     NMHDR   hdr;

     UINT    nSubMessage;

     DWORD   dwRulerStyle;

     int     iSepID;
     int     iNewPos;
     int     iOldPos;

     int     iParam1;
     int     iParam2;

  }RULERWNDNOTIFY_INFO;

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

Share

About the Author

HAMZADAYI
Software Developer
Turkey Turkey
I'm working as a software developer in a local software company. My firm is a special solution company. This is work about different projects. Some friends thinking it is amazing. Smile | :) ))

Comments and Discussions

 
QuestionUse for academic project PinmemberLéo Vailati20-Sep-11 11:19 
Questionproblem using ruler PinmemberFedericoman23-Jun-09 11:13 
GeneralChange the position of the 0 Value PinmemberJonathanMahut2-Aug-04 3:47 
GeneralRe: Change the position of the 0 Value PinmemberMartial Spirit19-Mar-07 7:53 
GeneralGood! PinmemberRickard Andersson29-Mar-03 7:15 
GeneralSo... Pinmemberannonymos2-Oct-02 13:35 
GeneralRe: So... PinmemberHockey2-Oct-02 21:13 
GeneralFix the formatting PinmemberHockey1-Oct-02 23:28 
GeneralRe: Fix the formatting PinmemberHAMZADAYI2-Oct-02 0:54 
GeneralFunny company description PinmemberStlan1-Oct-02 1:06 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.141223.1 | Last Updated 1 Oct 2002
Article Copyright 2002 by HAMZADAYI
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid