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

Implementing Rulers inside of Splitter Panes - 2

0.00/5 (No votes)
18 Dec 2002 1  
Using fixed panes to add rulers to your view

Sample Image - Mdi.gif

Introduction

Implementing Rulers inside of Splitter Panes - 2, is based on Stefan Ungureanu's work. This article provides an example to implementation in an MDI and SDI application.

I have changed the way to create the ruler, add function to Show/Hide the ruler and reformat some part of code.

Implementation

MDI way

#include "Ruler.h"

class CChildFrame : public CMDIChildWnd
{
    ...
    private: CRulerSplitterWnd m_Rulers; //Ruler object

    public: void ShowRulers(BOOL bShow);//Toggle the ruler

    void UpdateRulersInfo(stRULER_INFO stRulerInfo);//Update the ruler

    ...
};
//Create the ruler
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { if (!m_Rulers.CreateRulers(this, pContext)) { TRACE("Error creation of rulers\n"); return CMDIChildWnd::OnCreateClient(lpcs, pContext); } return TRUE; } //Toggle the ruler void CChildFrame::ShowRulers(BOOL bShow) { m_Rulers.ShowRulers(bShow);
} //Update the ruler
void CChildFrame::UpdateRulersInfo(stRULER_INFO stRulerInfo) { m_Rulers.UpdateRulersInfo(stRulerInfo); }

SDI way

#include "Ruler.h"

class CMainFrame : public CFrameWnd
{
    ....

All the rest is the same as MDI implementation.

Interaction

In your view (In this case CScrollView), catch >OnMouseMove, OnVScroll and OnHScroll messages to interact with the ruler.

//Update mouse position on the ruler
void CDemoView::OnMouseMove(UINT nFlags, CPoint point) { UpdateRulersInfo(RW_POSITION, GetScrollPosition(), point); ... //Update vertical scroll range and position of the ruler void CDemoView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { UpdateRulersInfo(RW_VSCROLL, GetScrollPosition()); ... //Update horizontal scroll range and position of the ruler void CDemoView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { UpdateRulersInfo(RW_HSCROLL, GetScrollPosition());

and finally

void CDemoView::UpdateRulersInfo(int nMessage, CPoint ScrollPos, CPoint Pos)
{
    stRULER_INFO pRulerInfo;
    pRulerInfo.uMessage = nMessage;
    pRulerInfo.ScrollPos = ScrollPos;
    pRulerInfo.Pos = Pos;
    pRulerInfo.DocSize = m_ImageSize;
    pRulerInfo.fZoomFactor = m_fZoomFactor;
    
    //CMainFrame in SDI

    ((CMainFrame*)GetParentFrame())->UpdateRulersInfo(pRulerInfo);
    //CChildFrame in MDI

    ((CChildFrame*)GetParentFrame())->UpdateRulersInfo(pRulerInfo);
}

Any way, take a look in the demo!

That's it!

Enjoy!

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