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

📄 listviewwindow.h

📁 虚拟打印机
💻 H
字号:
/* * * listviewwindow.h *   Copyright (C) 2006 Michael H. Overlin   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2 of the License, or   (at your option) any later version.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with this program; if not, write to the Free Software   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA      Contact at poster_printer@yahoo.com */#ifndef LISTVIEWWINDOW_H#define LISTVIEWWINDOW_H#include "coordtrans.h"#include "rulerdrawer.h"#include "renderpages.h"#include "selectionboxsprite.h"#include "window.h"#include <windows.h>#include <vector>// ** DONT DELETE THIS COMMENT **// GetCount MUST BE >=1 AND BOUNDS CANNOT BE EMPTY ; NO ITEMS RULED BOUNDS CAN BE EMPTYclass ViewableList {public:	// THE 'HAND' AND 'ARROW' STATES CAN BE CONSIDERED FLAG BITS	typedef uint SelectionSpec;	enum  { 		eNormal			= 0, 		eHandSel		= 1, 		eArrowSel		= 2, 		eHandArrowSel	= 3	};	virtual ~ViewableList() {}	// PURE VIRTUAL INTERFACE	virtual uint GetCount(void) const = 0;	virtual void GetBounds(OUT RECTD& rd) const = 0;	virtual void GetItemRuledBounds(IN uint uiItem, OUT RECTD& rd) const = 0;	virtual void GetItemBounds(IN uint uiItem, OUT RECTD& rd) const = 0;	virtual BOOL ItemFromPt(OUT uint& uiItem, IN const POINTD& ptd) const = 0;	// APPENDS ITEM INDICES TO vuiItem	virtual BOOL ItemsFromRect(OUT std::vector<uint>& vuiItem, const RECTD& rd) const = 0;	virtual void DrawItem(OUT HDC hdcDest, IN const CoordTrans& trans, IN const RECT& rDest, 		IN uint uiItem, IN ViewableList::SelectionSpec sel, IN BOOL bDraft) const = 0;	virtual void Draw(OUT HDC hdcDest, IN const CoordTrans& trans, IN const RECT& rDest, 		const std::vector<ViewableList::SelectionSpec> &vsel, IN BOOL bDraft) const = 0;	virtual void Draw(OUT HDC hdcDest, IN const CoordTrans& trans, IN const RECT& rDest, IN BOOL bDraft) const = 0;	// INTERFACE WITH DEFAULT ACTIONS	virtual void GetItemSelectableBounds(IN uint uiItem, OUT RECTD& rd) const { this->GetItemRuledBounds(uiItem, rd); }};#define LISTVIEWWINDOW_CLASSNAME			TEXT("ListViewWindow")class ListViewWindow : public Window {public:	enum ArrowSelectionMode {  eSelectBox, eSelectItems, eArrowSelectionModeNUMBER };	enum NotificationCode { 		eHandSelChange, 		eRulerUnitsChange, 		eArrowSelectionBoxChange, 		eArrowSelectionItemsChange,		eArrowSelectionModeChange	};	enum CursorType { eArrow, eHand };			ListViewWindow(HINSTANCE hinst, HWND hwnd);	~ListViewWindow();	//void Init(ListViewWindow::ArrowSelectionMode arrowSelMode, const SIZED& szdMinSelectionBox);	const ::ViewableList* GetList(void) const { return m_pList; }	::ViewableList* SetList(IN ViewableList *pList, IN const RulerDrawerProvider *prdp, 		ListViewWindow::ArrowSelectionMode arrowSelMode, const SIZED& szdMinSelectionBox);	void SetZoomLevel(IN double dZoom);	double GetZoomLevel(void) const;	ListViewWindow::CursorType GetCursorType(void) const { return m_ct; }	void SetCursorType(IN CursorType ct);	BOOL HasRulerUnitLabel(RulerPlacementSpec::Direction dir) const;	const tstring& GetRulerUnitLabel(RulerPlacementSpec::Direction dir) const ;	BOOL HasArrowSelectionBox(void) const ;	const RECTD& GetArrowSelectionBox(void) const ;	//void SetNoSelectionBox(void);	void SetArrowSelectionBox(IN BOOL bSelectionBox, const RECTD *prdSelectionBox,								IN BOOL bSendNotification = FALSE) ;	BOOL HasSelectionItems(void) const;	const std::vector<uint>& GetSelectionItems(void) const;	// 7/2	ListViewWindow::ArrowSelectionMode GetArrowSelectionMode(void) const { return m_arrowSelMode; }	BOOL GetDraftMode(void) const { return m_bDraftMode; }	void SetDraftMode(IN BOOL bDraftMode);	// THIS CLASS DOESN'T DELETE THESE CURSORS	void SetCursorResources(IN HCURSOR hcursHand, IN HCURSOR hcursArrow);protected:	virtual void Paint(HDC hdc);	virtual void PaintDirectLayer(HDC hdc);	virtual void CursorMsg(OUT MSGRESULT& mr, UINT msg, WPARAM wParam, LPARAM lParam);	virtual void KeyboardMsg(OUT MSGRESULT& mr, UINT msg, WPARAM wParam, LPARAM lParam);	virtual void MouseMsg(OUT MSGRESULT& mr, UINT msg, WPARAM wParam, LPARAM lParam);	virtual void TimerMsg(OUT MSGRESULT& mr, WPARAM wParam, LPARAM lParam);private:	enum MouseTrackingMode { eNotTracking, eTrackViewTranslation, eTrackDottedSelection, eTrackDragBoxPart };	struct HandSelState {		HandSelState(void) { bHasHandSel = FALSE; }		HandSelState(BOOL b, uint ui) { bHasHandSel = b; uiItem =ui; }		BOOL bHasHandSel;		uint uiItem;		//BOOL operator !=(const HandSelState& hss) const { return (bHasHandSel ^ hss.bHasHandSel) || (bHasHandSel && hss.bHasHandSel && uiItem != hss.uiItem); }		BOOL operator !=(const HandSelState& hss) const { return lxor(bHasHandSel, hss.bHasHandSel) || (bHasHandSel && hss.bHasHandSel && uiItem != hss.uiItem); }		BOOL operator ==(const HandSelState& hss) const { return !( *this != hss ); }	};	 	void CalculateLayout(void);	void DragArrowSelectionBoxPart(const POINT& ptDelta, BOOL bWithPaint);	void DrawArrowSelectionOutline(OUT HDC hdc, IN const RECTD& rdMouseSelOld, IN BOOL bEraseOld, IN BOOL bDrawNew);	BOOL IsValidArrowSelectionBox(OUT RECTD& rdBoxAdjusted, const RECTD& rBox) const;	void InvalidateItem(uint uiItem) ;	void EndMouseTracking(BOOL bCancel, BOOL bCtrl);	void ResetRulers(void);	//6/2	//void ResetSelection(void);	void MoveArrowSelectionBox(BOOL bHasArrowSelectionBox, const RECTD *prdNew, BOOL bWithPaint, BOOL bNotify) ;	void MoveArrowSelectionOutline(const POINTD& ptd1, const POINTD& ptd2, BOOL bEraseOld, BOOL bDrawNew) ;	void ResetView(void);	BOOL SelModeVectorHasMode(uint uiSelMode) const ;	void SetArrowSelection(const POINTD& ptd, BOOL bCtrl);	void SetArrowSelection(const RECTD& rd, BOOL bCtrl);	void SetArrowSelection(const std::vector<uint>& vuiItem, BOOL bCtrl) ;	void StartMouseTracking(ListViewWindow::MouseTrackingMode mouseTrackMode);	void SetHandSelection(const HandSelState& handsel);	void Translate(IN const POINT& ptDelta);	// 7/2	BOOL m_bDraftMode;	// COORDINATE TRANSFORMATION AND THE VIEWABLE LIST	CoordTrans m_trans;	ViewableList *m_pList;	// RULERS	LogFontKeeper m_lfkHoriz;	LogFontKeeper m_lfkVert;	Ruler m_rHoriz;	Ruler m_rVert;	const RulerDrawerProvider *m_prdp;	// ITEM SELECTION	HandSelState m_handsel;	ListViewWindow::ArrowSelectionMode m_arrowSelMode;	// -- FOR THE ARROW SELECTION BOX	BOOL m_bHasArrowSelectionBox;	RECTD m_rdSelectionBox;	SIZED m_szdMinSelectionBox;	class SelectionBoxSprite *m_ps;	RECT m_rSelectionBox;	// -- FOR THE ARROW SELECTION OUTLINE	RECTD m_rdArrowSelectionOutline;	// -- FOR THE ARROW SELECTION OUTLINE AND HAND SELECTION	std::vector<uint> m_vsel;	// LAYOUT	RECT m_rViewFrame;	RECT m_rView;	RECT m_rHorizRuler;	RECT m_rVertRuler;	// CURSOR	CursorType m_ct;	// MOUSE TRACKING	// CHANGE SOME BOOLS TO AN ENUM LATER -- FIX	//BOOL m_bHasMouseCapture;	MouseTrackingMode m_mouseTrackMode;	POINT m_ptMouseDown;	POINTD m_ptdMouseDown;	POINT m_ptMouseLast;	// -- DRAGGING THE ARROW SELECTION BOX PARTS	//BOOL m_bDragBoxPart;	::BoxPart m_bpMouseDrag;	// 7/7 DEBUG/FIX TRY TO MAKE MOUSE TRACK BOX PART BETTER	POINTD m_ptdLastGoodDragDelta;	//BOOL m_bHasLastGoodDragDelta;	// THIS IS USED ONLY TO SEE IF DRAGGING THE SELECTION BOX	// ACTUALLY RESULTED IN A CHANGE AFTER THE LEFT MOUSE BUTTON COMES UP	// IT ISN'T USED FOR ANYTHING ELSE, AND IS NOT VALID OTHERWISE OR EVEN INITIALIZED	RECTD m_rdDragBoxPart_InitialSelectionBox;	// CURSORS THAT MAY BE SET BY CLIENT	HCURSOR m_hcursArrow;	HCURSOR m_hcursHand;	// LOADED CURSORS 	HCURSOR m_hcursTwoArrowTLBR;	HCURSOR m_hcursTwoArrowTRBL;	HCURSOR m_hcursFourArrow;	// ****	// **** static stuff	// **** public:	static LPCTSTR TheirGetWindowClassName(void) { return ListViewWindow::atstrWindowClassName; }private:	static TCHAR atstrWindowClassName[];};#endif 

⌨️ 快捷键说明

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