www.pudn.com > DiskInfo.tgz > XStatusBar.h
/***************************************************************************** * * Autor: Joachim Raidl * Adresse: Joachim.Raidl@iname.com * Klasse: XPaneInfo, XStatusBar * JRRC: %J% * Inlines: SetFont(), SetFontSize(), SetFontName(), Increment(), * (XPaneInfo) Decrement(), GetFgColor(), GetBkColor(), GetText(), * GetBitmap(), GetNumber(), GetProgressCtrl(), * GetFont(), GetFontName(), GetFontSize(), GetMode(), * IsHScroll(), IsVScroll(), SetRange(), SetPos(), * OffsetPos(), SetStep(), StepIt(), * Inlines: GetProgressCtrl(), SetFgColor(), SetBkColor(), * (XStatusBar) SetBitmap(), SetText(), SetNumber(), SetFont(), * SetFontSize(), SetFontName(), SetMode(), SetRange(), * EnablePane(), CheckKey(), Increment(), Decrement(), * SetPos(), OffsetPos(), SetStep(), StepIt(), * GetFgColor(), GetBkColor(), GetBitmap(), GetText(), * GetNumber(), GetFont(), GetFontName(), GetFontSize(), * GetMode(), IsHScroll(), IsVScroll(), _XPI(), * ****************************************************************************/ #ifndef __XSTATUSBAR__ #define __XSTATUSBAR__ #include#define XSB_TOP DT_TOP // Styles werden aus DrawText übernommen. #define XSB_LEFT DT_LEFT // Theoretisch können auch alle anderen #define XSB_CENTER DT_CENTER // Format-Styles aus Draw-Text benutzt #define XSB_RIGHT DT_RIGHT // werden. Diese werden direkt an die #define XSB_VCENTER DT_VCENTER // jeweiligen Panes übergeben. Für Bitmaps #define XSB_BOTTOM DT_BOTTOM // werden jedoch nur diese Styles benutzt. #define XSB_LEER 0x00000000 #define XSB_TEXT 0x00100000 // Darstellung eines Textes im Pane #define XSB_NUMBER 0x00200000 // Darstellung eines Zahlenwertes im Pane #define XSB_BITMAP 0x00400000 // Darstellung eines Bitmaps im Pane #define XSB_PROGRESS 0x00800000 // Darstellung eines Progress-Bars im Pane #define XSB_HSCROLL 0x01000000 // Horizontales Scrollen des Textes bzw. Bitmaps #define XSB_VSCROLL 0x02000000 // Vertikales Scrollen des Textes bzw. Bitmaps #define XSB_DSCROLL 0x03000000 // Diagonales Scrollen des Textes bzw. Bitmaps #define XSB_REPEAT 0x10000000 // Mehrfaches hinter- bzw. untereinandersetzen #define XSB_STRETCH 0x20000000 // Bitmap an die Panegröße anpassen #define XSB_SMOOTH 0x40000000 // Progress-Bar smooth darstellen #define XSB_ALIGN 0x000fffff #define XSB_MODE 0x00f00000 #define XSB_SCROLL 0x0f000000 #define XSB_MISC 0xf0000000 class XPaneInfo : public CObject { protected: // 0 = aus, 1 = ein COLORREF fgColor[2]; // Textfarbe COLORREF bkColor[2]; // Hintergrundfarbe CString string[2]; // Text, Nummer oder Bitmapname CProgressCtrl *progress; // Fortschrittskontrolle LOGFONT font; // Schriftart int mode; // Darstellungsart int hScrollPos; // Position für horizontales Scrollen int vScrollPos; // Position für vertikales Scrollen // Funktionen public: XPaneInfo(); XPaneInfo(const XPaneInfo& paneInfo); ~XPaneInfo(); XPaneInfo operator=(const XPaneInfo& paneInfo); void SetDefault(); void HScroll(CRect& rect, int maxWidth, int nullValue); void VScroll(CRect& rect, int maxHeight, int nullValue); // Zugriffsfunktionen public: void SetFgColor(COLORREF newOnColor, COLORREF newOffColor = -1); void SetBkColor(COLORREF newOnColor, COLORREF newOffColor = -1); void SetBitmap(LPCSTR newOnBitmap, LPCSTR newOffBitmap = ""); void SetText(LPCSTR onText, LPCSTR offText = ""); void SetNumber(int onValue, int offValue = 0); void SetMode(int newMode); void SetFont(LOGFONT& newFont) { font = newFont; } void SetFont(CFont& newFont) { newFont.GetLogFont(&font); } void SetFont(CFont *newFont) { newFont->GetLogFont(&font); } void SetFontSize(int size) { font.lfHeight = size; } void SetFontName(LPCSTR name) { strcpy(font.lfFaceName, name); } void SetFont(LPCSTR name, int size); int Increment(bool on = true) { int n = atoi(string[on ? 1 : 0]); string[on ? 1 : 0].Format("%d", ++n); return n; } int Decrement(bool on = true) { int n = atoi(string[on ? 1 : 0]); string[on ? 1 : 0].Format("%d", --n); return n; } COLORREF GetFgColor(bool on = true) { return fgColor[on ? 1 : 0]; } COLORREF GetBkColor(bool on = true) { return bkColor[on ? 1 : 0]; } CString GetText(bool on = true) { return string[on ? 1 : 0]; } CString GetBitmap(bool on = true) { return string[on ? 1 : 0]; } int GetNumber(bool on = true) { return atoi(string[on ? 1 : 0]); } CProgressCtrl *GetProgressCtrl() { return progress; } LOGFONT& GetFont() { return font; } CString GetFontName() { return font.lfFaceName; } int GetFontSize() { return font.lfHeight; } int GetMode() { return mode; } bool IsHScroll() { return ((mode & XSB_HSCROLL) != 0); } bool IsVScroll() { return ((mode & XSB_VSCROLL) != 0); } void SetRange(int nLower, int nUpper){ if (progress) progress->SetRange(nLower, nUpper); } int SetPos(int nPos) { return (progress ? progress->SetPos(nPos) : -1); } int GetPos() { return (progress ? progress->GetPos() : -1); } int OffsetPos(int nPos) { return (progress ? progress->OffsetPos(nPos) : -1); } int SetStep(int nStep) { return (progress ? progress->SetStep(nStep) : -1); } int StepIt() { return (progress ? progress->StepIt() : -1); } #ifdef _DEBUG void Dump(CDumpContext& dc) const; void AssertValid() const; friend CDumpContext& AFXAPI operator<<(CDumpContext& dc, XPaneInfo& b); #endif //_DEBUG }; //**************************************************************************** //**************************************************************************** //**************************************************************************** class XStatusBar : public CStatusBar { public: static XStatusBar *aktBar; // Konstruktion public: XStatusBar(); bool CreateStatusBar(CWnd *pParent, const UINT* lpIDArray, int nIDCount, UINT pane0Style = SBPS_STRETCH); XPaneInfo& GetXPaneInfo(int ix); CProgressCtrl *GetProgressCtrl(int ix) { return GetXPaneInfo(ix).GetProgressCtrl(); } void SavePane(int ix); void RestorePane(int ix); int GetPaneAtPosition(CPoint& point); // Durchgriff auf die XPaneInfo-Members public: void SetFgColor(int ix, COLORREF on, COLORREF off = -1) { _XPI(ix).SetFgColor(on, off); Invalidate(FALSE); } void SetBkColor(int ix, COLORREF on, COLORREF off = -1) { _XPI(ix).SetBkColor(on, off); Invalidate(FALSE); } void SetBitmap(int ix, LPCSTR on, LPCSTR off = "") { _XPI(ix).SetBitmap(on, off); Invalidate(FALSE); } void SetText(int ix, LPCSTR on, LPCSTR off = "") { _XPI(ix).SetText(on, off); Invalidate(FALSE); } void SetNumber(int ix, int on, int off = 0) { _XPI(ix).SetNumber(on, off); Invalidate(FALSE); } void SetFont(int ix, LOGFONT& newFont) { _XPI(ix).SetFont(newFont); Invalidate(FALSE); } void SetFont(int ix, CFont& newFont) { _XPI(ix).SetFont(newFont); Invalidate(FALSE); } void SetFont(int ix, CFont *newFont) { _XPI(ix).SetFont(newFont); Invalidate(FALSE); } void SetFont(int ix, LPCSTR name, int size) { _XPI(ix).SetFont(name, size); Invalidate(FALSE); } void SetFontSize(int ix, int size) { _XPI(ix).SetFontSize(size); Invalidate(FALSE); } void SetFontName(int ix, LPCSTR name) { _XPI(ix).SetFontName(name); Invalidate(FALSE); } void SetMode(int ix, int newMode) { _XPI(ix).SetMode(newMode); Invalidate(FALSE); } void SetRange(int ix, int nLow, int nUp) { _XPI(ix).SetRange(nLow, nUp); Invalidate(FALSE); } void EnablePane(int ix, bool enable = true) { SetPaneStyle(ix, enable ? 0 : SBPS_DISABLED); } void CheckKey(int ix, int nVirtKey) { EnablePane(ix, ::GetKeyState(nVirtKey) & 1); } int Increment(int ix, bool on = true) { int ret = _XPI(ix).Increment(on); Invalidate(FALSE); return ret; } int Decrement(int ix, bool on = true) { int ret = _XPI(ix).Decrement(on); Invalidate(FALSE); return ret; } int SetPos(int ix, int nPos) { return _XPI(ix).SetPos(nPos); } int GetPos(int ix) { return _XPI(ix).GetPos(); } int OffsetPos(int ix, int nPos) { return _XPI(ix).OffsetPos(nPos); } int SetStep(int ix, int nStep) { return _XPI(ix).SetStep(nStep); } int StepIt(int ix) { return _XPI(ix).StepIt(); } UINT SetStyle(int ix, UINT style); int SetWidth(int ix, int width); COLORREF GetFgColor(int ix, bool on = true) { return _XPI(ix).GetFgColor(on); } COLORREF GetBkColor(int ix, bool on = true) { return _XPI(ix).GetBkColor(on); } CString GetBitmap(int ix, bool on = true) { return _XPI(ix).GetBitmap(on); } CString GetText(int ix, bool on = true) { return _XPI(ix).GetText(on); } int GetNumber(int ix, bool on = true) { return _XPI(ix).GetNumber(on); } LOGFONT& GetFont(int ix) { return _XPI(ix).GetFont(); } CString GetFontName(int ix) { return _XPI(ix).GetFontName(); } int GetFontSize(int ix) { return _XPI(ix).GetFontSize(); } int GetMode(int ix) { return _XPI(ix).GetMode(); } bool IsHScroll(int ix) { return _XPI(ix).IsHScroll(); } bool IsVScroll(int ix) { return _XPI(ix).IsVScroll(); } UINT GetStyle(int ix); int GetWidth(int ix); UINT GetID(int ix); // Hilfsfunktionen protected: XPaneInfo& _XPI(int ix) { return GetXPaneInfo(ix); } void DrawSizing(CDC *pDC); void DrawTextPane(CDC *pDC, int ix, CRect& rect, XPaneInfo& aktPane); void DrawBitmapPane(CDC *pDC, int ix, CRect& rect, XPaneInfo& aktPane); void DrawProgressPane(CDC *pDC, int ix, CRect& rect, XPaneInfo& aktPane); // Attribute public: CArray paneInfo; // Liste mit den Zusatzinformationen CMap buffer; // Zwischenpuffer für jeweils ein Pane UINT timerID; // ID des Refresh-Timers bool on; // Aktueller Pane aktiv oder inaktiv? CWnd *pParent; // Vaterfenster der Statusbar // Überschreibungen // Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen //{{AFX_VIRTUAL(XStatusBar) virtual BOOL SetIndicators(const UINT* lpIDArray, int nIDCount); //}}AFX_VIRTUAL // Implementierung public: virtual ~XStatusBar(); // Generierte Nachrichtenzuordnungsfunktionen protected: //{{AFX_MSG(XStatusBar) afx_msg void OnDestroy(); afx_msg void OnTimer(UINT nIDEvent); afx_msg void OnPaint(); afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnLButtonUp(UINT nFlags, CPoint point); afx_msg void OnMButtonDblClk(UINT nFlags, CPoint point); afx_msg void OnMButtonDown(UINT nFlags, CPoint point); afx_msg void OnMButtonUp(UINT nFlags, CPoint point); afx_msg void OnMouseMove(UINT nFlags, CPoint point); afx_msg void OnRButtonDblClk(UINT nFlags, CPoint point); afx_msg void OnRButtonDown(UINT nFlags, CPoint point); afx_msg void OnRButtonUp(UINT nFlags, CPoint point); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio fügt zusätzliche Deklarationen unmittelbar vor der vorhergehenden Zeile ein. #endif // __XSTATUSBAR__