⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scrollwnd.h

📁 MFC类库祥解, MFC类库祥解
💻 H
字号:
#if !defined(AFX_SCROLLWND_H__99F78BC8_8F4F_4862_B0B3_F42505EAC39D__INCLUDED_)
#define AFX_SCROLLWND_H__99F78BC8_8F4F_4862_B0B3_F42505EAC39D__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ScrollWnd.h : header file
//
#include <afxpriv.h>
/////////////////////////////////////////////////////////////////////////////
// CScrollWnd window

//这是一个从MFC的源码中扒出来的一个滚动窗口类,功能基本类似于CScrollView, 但是它的
//基类是CWnd,这样为一些不需要使用Document View结构但又想使用滚动窗口的小程序提供了
//比较方便的方法,他的接口除了两个坐标转换函数以外与CScrollView基本相同,同时在画图
//的地方采用了内存DC缓冲,避免了闪烁,这下你可以随意的刷新了(当然刷新太多了对效率
//还是有一些影响的)
//
//因为是工作需要,所以设计了这个类,目前只测试了基本的功能,映射模式为MM_TEXT在屏幕上
//显示正常,至于打印的支持还没有做。
//
//因为跟CScrollView功能基本相同,所以没有写什么注释,大家可以查MSDN中CScrollView的帮助
//如果发现跟CScrollView不一致的地方给我mail吧

class CScrollWnd : public CWnd
{
	int	m_nMapMode;
	CSize	m_totalLog;           // total size in logical units (no rounding)
	CSize	m_totalDev;           // total size in device units
	CSize	m_pageDev;            // per page scroll size in device units
	CSize	m_lineDev;            // per line scroll size in device units
	
	BOOL	m_bCenter;             // Center output if larger than total size
	BOOL	m_bInsideUpdate;       // internal state for OnSize callback

	static const SIZE	sizeDefault;
	
	//下面这些基本上都是Helper函数
	void ScrollToDevicePosition(POINT ptDev); // explicit scrolling no checking
	void UpdateBars();          // adjust scrollbars etc
	BOOL GetTrueClientSize(CSize& size, CSize& sizeSb);
	void GetScrollBarSizes(CSize& sizeSb);
	void GetScrollBarState(CSize sizeClient, CSize& needSb,	CSize& sizeRange, CPoint& ptMove, BOOL bInsideClient);


protected:
	BOOL PreCreateWindow(CREATESTRUCT& cs);
	
	//CenterOnPoint可能会有问题,没有测试
	void CenterOnPoint(CPoint ptCenter);
	

		
	virtual void	CalcWindowRect(LPRECT lpClientRect, UINT nAdjustType = adjustBorder);
	virtual void	OnPrepareDC(CDC* pDC, CPrintInfo* pInfo = NULL);

	virtual void	OnDraw(CDC* pDC) = 0;
	virtual void	OnInitialUpdate() = 0;
	
	// scrolling implementation support for OLE
	virtual BOOL OnScroll(UINT nScrollCode, UINT nPos, BOOL bDoScroll = TRUE);
	virtual BOOL OnScrollBy(CSize sizeScroll, BOOL bDoScroll = TRUE);
	
	//{{AFX_MSG(CScrollView)
	afx_msg void OnPaint();
	afx_msg int  OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg void OnSize(UINT nType, int cx, int cy);
	afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
	afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
	afx_msg BOOL OnMouseWheel(UINT fFlags, short zDelta, CPoint point);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()

public:
	CScrollWnd();
	virtual ~CScrollWnd();

	//坐标转换:从虚拟空间坐标到窗口客户区坐标
	void	DocumentToClient(CPoint& pt);
	//坐标转换:从窗口客户区坐标到虚拟空间坐标
	void	ClientToDocument(CPoint& pt);

	BOOL	Create(CWnd* pParent, const RECT& rc, DWORD dwStyle, UINT nID = 0);
	
	CPoint	GetScrollPosition() const;       // upper corner of scrolling
	CSize	GetTotalSize() const;             // logical size
	
	// for device units
	CPoint	GetDeviceScrollPosition() const;
	void	GetDeviceScrollSizes(int& nMapMode, SIZE& sizeTotal, SIZE& sizePage, SIZE& sizeLine) const;
	
	void	SetScrollSizes(int nMapMode, SIZE sizeTotal, const SIZE& sizePage = sizeDefault, const SIZE& sizeLine = sizeDefault);
	void	SetScaleToFitSize(SIZE sizeTotal);
	
	void	ScrollToPosition(POINT pt);    // set upper left position
	void	FillOutsideRect(CDC* pDC, CBrush* pBrush);
	void	ResizeParentToFit(BOOL bShrinkOnly = TRUE);
	BOOL	DoMouseWheel(UINT fFlags, short zDelta, CPoint point);
};
/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_SCROLLWND_H__99F78BC8_8F4F_4862_B0B3_F42505EAC39D__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -