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

📄 ksheet.h

📁 WTL开发的一个写字板程序 ,很有借鉴意义
💻 H
字号:
/*
 Copyright (c) 2000 
 Author: Konstantin Boukreev 
 E-mail: konstantin@mail.primorye.ru 

 Created: 26.06.2000 19:12:35
 Version: 1.0.0 

 Portions copyright Mihai Filimon (mihai@transart.ro). 
	from article in http://www.codeguru.com/controls/sheet_control.shtml
 Thanks a lot!
*/

#ifndef _kSheet_4b3991b4_c599_4fc1_89e7_62d134a53d5b
#define _kSheet_4b3991b4_c599_4fc1_89e7_62d134a53d5b

#if _MSC_VER > 1000 
#pragma once
#endif // _MSC_VER > 1000

#include "kSheetView.h"
#include "FindReplace.h"

class kSheetsCtrl : public CWindowImpl<kSheetsCtrl>
{
public:		
	enum {
		DELTA_ARROW = 5,
		SC_ONCHANGESHEET = WM_USER + 758
	};

private:
	CSimpleArray<kSheetView*> m_sheets;
	
	CContainedWindowT<CScrollBar> m_winArrow;
	CContainedWindowT<CScrollBar> m_winScroll;
	
	HCURSOR m_hCursor;
	
	CFont m_font;
	CFont m_bfont;

	RECT m_rcClient;
	RECT m_rcScroll;
	SIZE m_szArrow;
	
	bool m_bShowScrollBar;
	bool m_bTrack;

	int m_iActive;

	int m_xMoveBar;
	int m_xPages;

	FindReplace m_fr;
	FindDlg m_FindDlg;
	ReplaceDlg m_ReplaceDlg;
	
public:
	kSheetsCtrl();
	~kSheetsCtrl();

	DECLARE_WND_CLASS_EX(_T("kSheetsCtrl"), CS_HREDRAW | CS_VREDRAW, COLOR_BTNSHADOW)

	BEGIN_MSG_MAP(kSheetsCtrl)
		MESSAGE_HANDLER(WM_CREATE, OnCreate)
		MESSAGE_HANDLER(WM_DESTROY,	OnDestroy)
		MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
		MESSAGE_HANDLER(WM_PAINT, OnPaint)	
		MESSAGE_HANDLER(WM_SIZE, OnSize)
		MESSAGE_HANDLER(WM_MOUSEMOVE, OnMouseMove)
		MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown)
		MESSAGE_HANDLER(WM_LBUTTONUP, OnLButtonUp)	
		MESSAGE_HANDLER(WM_HSCROLL, OnHScroll)	
		MESSAGE_HANDLER(WM_INPUTLANGCHANGE, OnRefreshKeyboardLayout)
		
		MESSAGE_HANDLER(WM_DROPFILES, OnDropFiles)	

		NOTIFY_CODE_HANDLER(EN_DROPFILES, OnEnDropFiles)
		NOTIFY_CODE_HANDLER(EN_LINK, OnEnLink)
		NOTIFY_CODE_HANDLER(EN_REQUESTRESIZE, OnRequestResize)
		COMMAND_CODE_HANDLER(EN_HSCROLL, OnHScrollNotify)		

		COMMAND_ID_HANDLER(ID_EDIT_FIND, OnEditFind)
		COMMAND_ID_HANDLER(ID_EDIT_REPEAT, OnEditFindNext)
		COMMAND_ID_HANDLER(ID_EDIT_REPLACE, OnEditReplace)

		MESSAGE_HANDLER(FindReplace::GetFindReplaceMsg(), OnFindReplaceCmd)

	ALT_MSG_MAP(1) //left arrow
	ALT_MSG_MAP(2) //scrollbar		
	END_MSG_MAP()

// window message
protected:	
	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);				
	LRESULT OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);	
	LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);		
	LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);	
	LRESULT OnLButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnHScroll(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);	
	LRESULT OnEraseBkgnd(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);	
	LRESULT OnHScrollNotify(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);		
	LRESULT OnRequestResize(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);		
	LRESULT OnEnLink(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);	
	LRESULT OnEditFind(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
	LRESULT OnEditFindNext(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
	LRESULT OnEditReplace(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
	LRESULT  OnFindReplaceCmd(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnEnDropFiles(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
	LRESULT OnDropFiles(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnRefreshKeyboardLayout (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
	{
		::PostMessage(g_Context.m_frame->GetWindow(), uMsg, wParam, lParam);
		return 0;
	}

// 
public:
	BOOL PreTranslateMessage(MSG* pMsg);

// public intreface
public:
	kSheetView* Add();
	void Close(int);
	void Active(int);
	int Active() const;
	unsigned int Count() const;
	bool IsEmpty() const;
	kSheetView* GetAt(int i) const;
			
// utilites
private:
	void DrawSheets(HDC hdc, RECT&);
	void DrawMoveBar(HDC hdc, RECT&);
	void DrawCurve(HDC hdc, COLORREF clr, POINT* pts, int n, bool bMove);		
	void UpdateArrow ();
	void UpdateScrollBar();
	void OnNotify();
	bool HitMoverBar (int);	
	void RedrawNeed();	
	int HitTest(int, int);
	void SetMoveBar (int);	
	void ApplyLayout(int, int);	
	void DoDropFiles(HDROP);
};

///////////////////////////////////////////
// inline

inline LRESULT kSheetsCtrl::
OnEraseBkgnd(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
{
	if (IsEmpty()) {
		bHandled = FALSE;
		return 0;
	}
	return 1;
}

inline void kSheetsCtrl::
OnNotify()
{
	DWORD idCtrl = GetWindowLong(GWL_ID);
	NMHDR nmhdr = {m_hWnd, idCtrl, SC_ONCHANGESHEET};
	::SendMessage(GetParent(), WM_NOTIFY, idCtrl, (LPARAM)&nmhdr);
}

inline int kSheetsCtrl::
Active() const 
{
	return m_iActive;
}

inline unsigned int kSheetsCtrl::
Count() const 
{
	return m_sheets.GetSize();
}

inline bool kSheetsCtrl::
IsEmpty() const 
{
	return m_sheets.GetSize() == 0;
}

inline kSheetView* kSheetsCtrl::
GetAt(int i) const
{
	return m_sheets[i];
}

#endif //_kSheet_4b3991b4_c599_4fc1_89e7_62d134a53d5b

⌨️ 快捷键说明

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