home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
msdn_vcb
/
samples
/
vc98
/
mfc
/
ole
/
wordpad
/
ruler.h
< prev
next >
Wrap
C/C++ Source or Header
|
1998-03-26
|
6KB
|
203 lines
// riched.h : header file
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.
#ifndef __RULER_H__
#define __RULER_H__
class CWordPadView;
class CWordPadDoc;
class CRulerBar;
// ruler items include left margin, right margin, indent, and tabs
// horz positions in twips -- necessary to avoid rounding errors
// vertical position in pixels
class CRulerItem
{
public:
CRulerItem(UINT nBitmapID = 0);
~CRulerItem();
virtual BOOL HitTestPix(CPoint pt) { return GetHitRectPix().PtInRect(pt); }
virtual void Draw(CDC& dc);
virtual void SetHorzPosTwips(int nXPos);
virtual void TrackHorzPosTwips(int nXPos, BOOL bOnRuler = TRUE);
virtual void SetVertPos(int nYPos) { m_nYPosPix = nYPos; }
virtual void SetAlignment(int nAlign) {m_nAlignment = nAlign;}
virtual void SetRuler(CRulerBar* pRuler) {m_pRuler = pRuler;}
virtual void SetBounds(int nMin, int nMax) { m_nMin = nMin; m_nMax = nMax; }
int GetMin() { return m_nMin;}
int GetMax() { return m_nMax;}
void Invalidate();
int GetVertPosPix() { return m_nYPosPix;}
int GetHorzPosTwips() { return m_nXPosTwips;}
int GetHorzPosPix();
CRect GetHitRectPix();
void DrawFocusLine();
void SetTrack(BOOL b);
HBITMAP m_hbm;
HBITMAP m_hbmMask;
CSize m_size; // size of item in pixels
// Operations
BOOL LoadMaskedBitmap(LPCTSTR lpszResourceName);
protected:
int m_nYPosPix;
int m_nXPosTwips;
int m_nAlignment;
BOOL m_bTrack;
CRulerBar* m_pRuler;
CRect m_rcTrack;
CDC* m_pDC; // dc used for drawing tracking line
int m_nMin, m_nMax;
};
class CComboRulerItem : public CRulerItem
{
public:
CComboRulerItem(UINT nBitmapID1, UINT nBitmapID2, CRulerItem& item);
virtual BOOL HitTestPix(CPoint pt);
virtual void Draw(CDC& dc);
virtual void SetHorzPosTwips(int nXPos);
virtual void TrackHorzPosTwips(int nXPos, BOOL bOnRuler = TRUE);
virtual void SetVertPos(int nYPos);
virtual void SetAlignment(int nAlign);
virtual void SetRuler(CRulerBar* pRuler);
virtual void SetBounds(int nMin, int nMax);
int GetMin();
int GetMax();
protected:
CRulerItem m_secondary;
CRulerItem& m_link;
BOOL m_bHitPrimary;
};
class CTabRulerItem : public CRulerItem
{
public:
CTabRulerItem() { SetAlignment(TA_LEFT); }
virtual void Draw(CDC& dc) {if (GetHorzPosTwips() != 0) CRulerItem::Draw(dc);}
virtual void TrackHorzPosTwips(int nXPos, BOOL bOnRuler = TRUE);
virtual BOOL HitTestPix(CPoint pt) { return (GetHorzPosTwips() != 0) ? CRulerItem::HitTestPix(pt) : FALSE;}
};
/////////////////////////////////////////////////////////////////////////////
// CRulerBar
class CRulerBar : public CControlBar
{
// Construction
public:
CRulerBar(BOOL b3DExt = TRUE);
~CRulerBar();
// Operations
public:
virtual BOOL Create(CWnd* pParentWnd, DWORD dwStyle, UINT nID);
protected:
void Update(const PARAFORMAT& pf);
void Update(CSize sizePaper, const CRect& rectMargins);
// Attributes
public:
BOOL m_bDeferInProgress;
BOOL m_bDraw3DExt;
CUnit m_unit;
CRulerItem* m_pSelItem;
CFont fnt;
CSize GetBaseUnits();
CComboRulerItem m_leftmargin;
CRulerItem m_indent;
CRulerItem m_rightmargin;
CRulerItem m_tabItem;
CTabRulerItem m_pTabItems[MAX_TAB_STOPS];
CSize m_sizePaper;
CRect m_rectMargin;
int PrintWidth() {return m_sizePaper.cx - m_rectMargin.left -
m_rectMargin.right;}
int m_nTabs;
int m_logx;
int m_nLinePos;
int m_nScroll; // in pixels
CPen penFocusLine;
CPen penBtnHighLight;
CPen penBtnShadow;
CPen penWindowFrame;
CPen penBtnText;
CPen penBtnFace;
CPen penWindowText;
CPen penWindow;
CBrush brushWindow;
CBrush brushBtnFace;
// Implementation
public:
virtual void DoPaint(CDC* pDC);
virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz);
void ClientToRuler(CPoint& pt) {pt.Offset(-m_cxLeftBorder+m_nScroll, -m_cyTopBorder);}
void ClientToRuler(CRect& rect) {rect.OffsetRect(-m_cxLeftBorder+m_nScroll, -m_cyTopBorder);}
void RulerToClient(CPoint& pt) {pt.Offset(m_cxLeftBorder-m_nScroll, m_cyTopBorder);}
void RulerToClient(CRect& rect) {rect.OffsetRect(m_cxLeftBorder-m_nScroll, m_cyTopBorder);}
int XTwipsToClient(int nT) {return MulDiv(nT, m_logx, 1440) + m_cxLeftBorder - m_nScroll;}
int XClientToTwips(int nC) {return MulDiv(nC - m_cxLeftBorder + m_nScroll, 1440, m_logx);}
int XTwipsToRuler(int nT) {return MulDiv(nT, m_logx, 1440);}
int XRulerToTwips(int nR) {return MulDiv(nR, 1440, m_logx);}
int XRulerToClient(int nR) {return nR + m_cxLeftBorder - m_nScroll;}
int XClientToRuler(int nC) {return nC - m_cxLeftBorder + m_nScroll;}
protected:
virtual void OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler);
void CreateGDIObjects();
void DrawFace(CDC& dc);
void DrawTickMarks(CDC& dC);
void DrawNumbers(CDC& dc, int nInc, int nTPU);
void DrawDiv(CDC& dc, int nInc, int nLargeDiv, int nLength);
void DrawTabs(CDC& dc);
void FillInParaFormat(PARAFORMAT& pf);
void SortTabs();
void SetMarginBounds();
CRulerItem* GetFreeTab();
CView* GetView()
{
ASSERT(GetParent() != NULL);
return ((CFrameWnd*)GetParent())->GetActiveView();
}
CDocument* GetDocument() { return GetView()->GetDocument(); }
CTabRulerItem* GetHitTabPix(CPoint pt);
// Generated message map functions
//{{AFX_MSG(CRulerBar)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnSysColorChange();
afx_msg void OnWindowPosChanging(WINDOWPOS FAR* lpwndpos);
afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos);
//}}AFX_MSG
afx_msg LRESULT OnSizeParent(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
friend class CRulerItem;
};
inline int CRulerItem::GetHorzPosPix()
{ return m_pRuler->XTwipsToRuler(m_nXPosTwips); }
#endif