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

📄 xstatusbar.cpp

📁 本程序源码是为日本一家地震监测机构编写的
💻 CPP
字号:
/*****************************************************************************
 *
 * Autor:			Joachim Raidl
 * Adresse:			Joachim.Raidl@iname.com
 * Klasse:			XPaneInfo, XStatusBar
 * Files:			XStatusBar.Cpp, XStatusBar.H
 * Beschreibung:	Mit dieser Klasse k鰊nen komplexe Status-Zeilen verwaltet
 *					werden. So k鰊nen in jedem Pane Texte, Bitmaps oder
 *					Progress-Bars dargestellt, horizontal, vertikal oder
 *					diagonal gescrollt und links, rechts oder zentriert
 *					ausgerichtet werden. Auch kann jeder Zeit zwischen den
 *					einzelnen Modi hin- und hergeschaltet werden. F黵 jede
 *					Pane kann sowohl ein Einschalt- als auch ein Ausschalt-
 *					text, -hintergrund oder -bitmap definiert werden.
 * Funktionen:		operator=(), SetDefault(), SetFont(), SetMode(), 
 * (XPaneInfo)		SetFgColor(), SetBkColor(), SetBitmap(), SetText(), 
 *					SetNumber(), HScroll(), VScroll(), 
 * Funktionen:		CreateStatusBar(), SetIndicators(), OnPaint(), 
 * (XStatusBar)		DrawSizing(), DrawTextPane(), DrawBitmapPane(), 
 *					DrawProgressPane(), GetXPaneInfo(), OnTimer(), 
 *					SetStyle(), SetWidth(), GetStyle(), GetWidth(), GetID(), 
 *					OnDestroy(), SavePane(), RestorePane(), 
 *					GetPaneAtPosition(), OnMouseMove(),
 *					OnLButtonUp(), OnMButtonUp(), OnRButtonUp(), 
 *					OnLButtonDown(), OnMButtonDown(), OnRButtonDown(),
 *					OnLButtonDblClk(), OnMButtonDblClk(), OnRButtonDblClk(),
 *
 ****************************************************************************/

#include "StdAfx.h"
#include "XStatusBar.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

volatile static char jrrcid[] = "%J%";

#define IDC_JRLIB_STATUSBAR_TIMER	20000

/*****************************************************************************
 * Klasse:		XPaneInfo
 * Funktion:	XPaneInfo, ~XPaneInfo
 * Parameter:	-
 * Return:		
 *
 * Der Konstruktor initialisiert ein Pane. Im Desturktor wird eine eventuell
 * vorhandene Progress-Kontrolle wieder gel鰏cht.
 ****************************************************************************/
XPaneInfo::XPaneInfo()
{
	progress	= NULL;
	hScrollPos	= 0;
	vScrollPos	= 0;

	SetDefault();
}

XPaneInfo::XPaneInfo(const XPaneInfo& paneInfo)
{
	for (int i = 0; i < 2; i++)
	{
		fgColor[i]	= paneInfo.fgColor[i];
		bkColor[i]	= paneInfo.bkColor[i];
		string[i]	= paneInfo.string[i];
	}

	font			= paneInfo.font;
	mode			= paneInfo.mode;
	progress		= NULL;
	hScrollPos		= paneInfo.hScrollPos;
	vScrollPos		= paneInfo.vScrollPos;
}

XPaneInfo::~XPaneInfo()
{
	if (progress)	delete progress;
	progress = NULL; 
}

/*****************************************************************************
 * Klasse:		XPaneInfo
 * Funktion:	operator=
 * Parameter:	paneInfo	Zweites XPaneInfo-Element, dessen Informationen
 *							kopiert werden.
 * Return:		Kopie des XPaneInfo-Elements
 *
 * Zuweisungsoperator.
 * !!! ACHTUNG !!! 'progress' wird nicht kopiert! Ein eventuell vorhandener
 * Progress-Bar wird gel鰏cht.
 ****************************************************************************/
XPaneInfo XPaneInfo::operator=(const XPaneInfo& paneInfo)
{
	for (int i = 0; i < 2; i++)
	{
		fgColor[i]	= paneInfo.fgColor[i];
		bkColor[i]	= paneInfo.bkColor[i];
		string[i]	= paneInfo.string[i];
	}

	font			= paneInfo.font;
	mode			= paneInfo.mode;
	hScrollPos		= paneInfo.hScrollPos;
	vScrollPos		= paneInfo.vScrollPos;

	if (progress)	delete progress;
	progress = NULL; 

	return *this;
}

/*****************************************************************************
 * Klasse:		XPaneInfo
 * Funktion:	SetDefault
 * Parameter:	-
 * Return:		-
 *
 * Hier werden die Members initialisiert.
 ****************************************************************************/
void XPaneInfo::SetDefault()
{
	bkColor[1]	= COLORREF(GetSysColor(COLOR_MENU));
	bkColor[0]	= bkColor[1];

	fgColor[1]	= GetSysColor(COLOR_MENUTEXT);
	fgColor[0]	= RGB(GetRValue(bkColor[1])/2, GetGValue(bkColor[1])/2, GetBValue(bkColor[1])/2);

	mode		= XSB_TEXT | DT_LEFT;
	SetFont(CFont::FromHandle((HFONT) GetStockObject(DEFAULT_GUI_FONT)));

	if (progress)	delete progress;
	progress = NULL; 
}

/*****************************************************************************
 * Klasse:		XPaneInfo
 * Funktion:	SetFont
 * Parameter:	name	Name der Schriftart (Bsp.: Arial)
 *				size	Gr鲞e der Schriftart in 1/10 Pt (Bsp.: 120)
 * Return:		-
 *
 * Setzt den Font f黵 ein Pane anhand des Fontsnamens und der Punktgr鲞e
 * (10 * Point).
 ****************************************************************************/
void XPaneInfo::SetFont(LPCTSTR name, int size)
{
	CFont pointFont;
	pointFont.CreatePointFont(size, name);
	pointFont.GetLogFont(&font);
}

/*****************************************************************************
 * Klasse:		XPaneInfo
 * Funktion:	SetMode
 * Parameter:	newMode		Neuer Anzeigemodus
 * Return:		-
 *
 * Setzt den Modus f黵 das aktuelle Pane. Falls dieses Pane zuvor mit einer
 * ProgressCtrl besetzt war, wird diese zuvor gel鰏cht.
 ****************************************************************************/
void XPaneInfo::SetMode(int newMode)
{
	if ((mode = newMode) & XSB_PROGRESS)
	{
		if (!progress)
		{
			UINT style = WS_VISIBLE | WS_CHILD;
			if (mode & XSB_SMOOTH) style |= PBS_SMOOTH;

			progress = new CProgressCtrl();
			progress->Create(style, CRect(0,0,0,0), XStatusBar::aktBar, 1);
		}
	}
	else if (progress)
	{
		delete progress;
		progress = NULL; 
	}
}

/*****************************************************************************
 * Klasse:		XPaneInfo
 * Funktion:	SetFgColor
 * Parameter:	on		Text-Farbe im aktiven Zustand
 *				off		Text-Farbe im inaktiven Zustand
 * Return:		-
 *
 * Definiert die Farben f黵 einen angezeigten Text. Hierbei k鰊nen zwei
 * Farben f黵 den aktiven und den inaktiven Zustand definiert werden. Wird
 * die zweite Farbe vergessen, wird sie mit der halben Intensit鋞 der Hinter-
 * grundfarbe vordefiniert.
 ****************************************************************************/
void XPaneInfo::SetFgColor(COLORREF on, COLORREF off)
{
	fgColor[1] = on;

	if (off != -1)
		fgColor[0] = off;
	else
	{
		COLORREF bk = GetSysColor(COLOR_MENU);
		fgColor[0] = RGB(GetRValue(bk)/2, GetGValue(bk)/2, GetBValue(bk)/2);
	}
}

/*****************************************************************************
 * Klasse:		XPaneInfo
 * Funktion:	SetBkColor
 * Parameter:	on		Hintergrundfarbe im aktiven Zustand
 *				off		Hintergrundfarbe im inaktiven Zustand
 * Return:		-
 *
 * Definiert die Hintergrundfarben f黵 einen angezeigten Text. Hierbei k鰊nen
 * zwei Farben f黵 den aktiven und den inaktiven Zustand definiert werden.
 * Wird die zweite Farbe vergessen, wird sie mit der Hintergrundfarbe vor-
 * definiert.
 ****************************************************************************/
void XPaneInfo::SetBkColor(COLORREF on, COLORREF off)
{
	bkColor[1] = on;
	if (off != -1)	bkColor[0] = off;
	else			bkColor[0] = GetSysColor(COLOR_MENU);
}

/*****************************************************************************
 * Klasse:		XPaneInfo
 * Funktion:	SetBitmap, SetText, SetNumber
 * Parameter:	newBitmap		Name des im Pane anzuzeigenden Bitmaps
 *				newText			Im Pane anzuzeigender Text
 *				newNumber		Im Pane anzuzeigende Nummer
 * Return:		-
 *
 * Mit diesen Funktionen werden die Bitmaps, Texte oder Nummern f黵 die
 * Anzeige in dem aktuellen Pane gesetzt.
 ****************************************************************************/
void XPaneInfo::SetBitmap(LPCTSTR newOnBitmap, LPCTSTR newOffBitmap)
{
	string[1]	= newOnBitmap;
	string[0]	= newOffBitmap;
}

void XPaneInfo::SetText(LPCTSTR newOnText, LPCTSTR newOffText)
{
	string[1]	= newOnText;
	string[0]	= newOffText;
}

void XPaneInfo::SetNumber(int newOnNumber, int newOffNumber)
{
	string[1].Format(_T("%d"), newOnNumber);
	string[0].Format(_T("%d"), newOffNumber);
}

/*****************************************************************************
 * Klasse:		XPaneInfo
 * Funktion:	HScroll, VScroll
 * Parameter:	rect			Ausgaberechteck des aktuellen Panes
 *				maxWidth		Maximale Breite, bzw. H鰄e beim Scrollen
 *				maxHeight		(z. B. Textl鋘ge oder Bitmapbreite)
 *				nullValue		Wert f黵 Turnaround
 * Return:		-
 *
 * Inkrementiert die jeweilige Scrollvariable, soda

⌨️ 快捷键说明

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