XSTATUSBAR.CPP
上传用户:bjaaa555
上传日期:2013-01-31
资源大小:40k
文件大小:28k
源码类别:

状态条

开发平台:

Visual C++

  1. /*****************************************************************************
  2.  *
  3.  * Autor: Joachim Raidl
  4.  * Adresse: Joachim.Raidl@iname.com
  5.  * Klasse: XPaneInfo, XStatusBar
  6.  * Files: XStatusBar.Cpp, XStatusBar.H
  7.  * Beschreibung: Mit dieser Klasse k鰊nen komplexe Status-Zeilen verwaltet
  8.  * werden. So k鰊nen in jedem Pane Texte, Bitmaps oder
  9.  * Progress-Bars dargestellt, horizontal, vertikal oder
  10.  * diagonal gescrollt und links, rechts oder zentriert
  11.  * ausgerichtet werden. Auch kann jeder Zeit zwischen den
  12.  * einzelnen Modi hin- und hergeschaltet werden. F黵 jede
  13.  * Pane kann sowohl ein Einschalt- als auch ein Ausschalt-
  14.  * text, -hintergrund oder -bitmap definiert werden.
  15.  * Funktionen: operator=(), SetDefault(), SetFont(), SetMode(), 
  16.  * (XPaneInfo) SetFgColor(), SetBkColor(), SetBitmap(), SetText(), 
  17.  * SetNumber(), HScroll(), VScroll(), 
  18.  * Funktionen: CreateStatusBar(), SetIndicators(), OnPaint(), 
  19.  * (XStatusBar) DrawSizing(), DrawTextPane(), DrawBitmapPane(), 
  20.  * DrawProgressPane(), GetXPaneInfo(), OnTimer(), 
  21.  * SetStyle(), SetWidth(), GetStyle(), GetWidth(), GetID(), 
  22.  * OnDestroy(), SavePane(), RestorePane(), 
  23.  * GetPaneAtPosition(), OnMouseMove(),
  24.  * OnLButtonUp(), OnMButtonUp(), OnRButtonUp(), 
  25.  * OnLButtonDown(), OnMButtonDown(), OnRButtonDown(),
  26.  * OnLButtonDblClk(), OnMButtonDblClk(), OnRButtonDblClk(),
  27.  *
  28.  ****************************************************************************/
  29. #include "StdAfx.h"
  30. #include "XStatusBar.h"
  31. #ifdef _DEBUG
  32. #define new DEBUG_NEW
  33. #undef THIS_FILE
  34. static char THIS_FILE[] = __FILE__;
  35. #endif
  36. volatile static char jrrcid[] = "%J%";
  37. #define IDC_JRLIB_STATUSBAR_TIMER 20000
  38. /*****************************************************************************
  39.  * Klasse: XPaneInfo
  40.  * Funktion: XPaneInfo, ~XPaneInfo
  41.  * Parameter: -
  42.  * Return:
  43.  *
  44.  * Der Konstruktor initialisiert ein Pane. Im Desturktor wird eine eventuell
  45.  * vorhandene Progress-Kontrolle wieder gel鰏cht.
  46.  ****************************************************************************/
  47. XPaneInfo::XPaneInfo()
  48. {
  49. progress = NULL;
  50. hScrollPos = 0;
  51. vScrollPos = 0;
  52. SetDefault();
  53. }
  54. XPaneInfo::XPaneInfo(const XPaneInfo& paneInfo)
  55. {
  56. for (int i = 0; i < 2; i++)
  57. {
  58. fgColor[i] = paneInfo.fgColor[i];
  59. bkColor[i] = paneInfo.bkColor[i];
  60. string[i] = paneInfo.string[i];
  61. }
  62. font = paneInfo.font;
  63. mode = paneInfo.mode;
  64. progress = NULL;
  65. hScrollPos = paneInfo.hScrollPos;
  66. vScrollPos = paneInfo.vScrollPos;
  67. }
  68. XPaneInfo::~XPaneInfo()
  69. {
  70. if (progress) delete progress;
  71. progress = NULL; 
  72. }
  73. /*****************************************************************************
  74.  * Klasse: XPaneInfo
  75.  * Funktion: operator=
  76.  * Parameter: paneInfo Zweites XPaneInfo-Element, dessen Informationen
  77.  * kopiert werden.
  78.  * Return: Kopie des XPaneInfo-Elements
  79.  *
  80.  * Zuweisungsoperator.
  81.  * !!! ACHTUNG !!! 'progress' wird nicht kopiert! Ein eventuell vorhandener
  82.  * Progress-Bar wird gel鰏cht.
  83.  ****************************************************************************/
  84. XPaneInfo XPaneInfo::operator=(const XPaneInfo& paneInfo)
  85. {
  86. for (int i = 0; i < 2; i++)
  87. {
  88. fgColor[i] = paneInfo.fgColor[i];
  89. bkColor[i] = paneInfo.bkColor[i];
  90. string[i] = paneInfo.string[i];
  91. }
  92. font = paneInfo.font;
  93. mode = paneInfo.mode;
  94. hScrollPos = paneInfo.hScrollPos;
  95. vScrollPos = paneInfo.vScrollPos;
  96. if (progress) delete progress;
  97. progress = NULL; 
  98. return *this;
  99. }
  100. /*****************************************************************************
  101.  * Klasse: XPaneInfo
  102.  * Funktion: SetDefault
  103.  * Parameter: -
  104.  * Return: -
  105.  *
  106.  * Hier werden die Members initialisiert.
  107.  ****************************************************************************/
  108. void XPaneInfo::SetDefault()
  109. {
  110. bkColor[1] = COLORREF(GetSysColor(COLOR_MENU));
  111. bkColor[0] = bkColor[1];
  112. fgColor[1] = GetSysColor(COLOR_MENUTEXT);
  113. fgColor[0] = RGB(GetRValue(bkColor[1])/2, GetGValue(bkColor[1])/2, GetBValue(bkColor[1])/2);
  114. mode = XSB_TEXT | DT_LEFT;
  115. SetFont(CFont::FromHandle((HFONT) GetStockObject(ANSI_VAR_FONT)));
  116. if (progress) delete progress;
  117. progress = NULL; 
  118. }
  119. /*****************************************************************************
  120.  * Klasse: XPaneInfo
  121.  * Funktion: SetFont
  122.  * Parameter: name Name der Schriftart (Bsp.: Arial)
  123.  * size Gr鲞e der Schriftart in 1/10 Pt (Bsp.: 120)
  124.  * Return: -
  125.  *
  126.  * Setzt den Font f黵 ein Pane anhand des Fontsnamens und der Punktgr鲞e
  127.  * (10 * Point).
  128.  ****************************************************************************/
  129. void XPaneInfo::SetFont(LPCSTR name, int size)
  130. {
  131. CFont pointFont;
  132. pointFont.CreatePointFont(size, name);
  133. pointFont.GetLogFont(&font);
  134. }
  135. /*****************************************************************************
  136.  * Klasse: XPaneInfo
  137.  * Funktion: SetMode
  138.  * Parameter: newMode Neuer Anzeigemodus
  139.  * Return: -
  140.  *
  141.  * Setzt den Modus f黵 das aktuelle Pane. Falls dieses Pane zuvor mit einer
  142.  * ProgressCtrl besetzt war, wird diese zuvor gel鰏cht.
  143.  ****************************************************************************/
  144. void XPaneInfo::SetMode(int newMode)
  145. {
  146. if ((mode = newMode) & XSB_PROGRESS)
  147. {
  148. if (!progress)
  149. {
  150. UINT style = WS_VISIBLE | WS_CHILD;
  151. if (mode & XSB_SMOOTH) style |= PBS_SMOOTH;
  152. progress = new CProgressCtrl();
  153. progress->Create(style, CRect(0,0,0,0), XStatusBar::aktBar, 1);
  154. }
  155. }
  156. else if (progress)
  157. {
  158. delete progress;
  159. progress = NULL; 
  160. }
  161. }
  162. /*****************************************************************************
  163.  * Klasse: XPaneInfo
  164.  * Funktion: SetFgColor
  165.  * Parameter: on Text-Farbe im aktiven Zustand
  166.  * off Text-Farbe im inaktiven Zustand
  167.  * Return: -
  168.  *
  169.  * Definiert die Farben f黵 einen angezeigten Text. Hierbei k鰊nen zwei
  170.  * Farben f黵 den aktiven und den inaktiven Zustand definiert werden. Wird
  171.  * die zweite Farbe vergessen, wird sie mit der halben Intensit鋞 der Hinter-
  172.  * grundfarbe vordefiniert.
  173.  ****************************************************************************/
  174. void XPaneInfo::SetFgColor(COLORREF on, COLORREF off)
  175. {
  176. fgColor[1] = on;
  177. if (off != -1)
  178. fgColor[0] = off;
  179. else
  180. {
  181. COLORREF bk = GetSysColor(COLOR_MENU);
  182. fgColor[0] = RGB(GetRValue(bk)/2, GetGValue(bk)/2, GetBValue(bk)/2);
  183. }
  184. }
  185. /*****************************************************************************
  186.  * Klasse: XPaneInfo
  187.  * Funktion: SetBkColor
  188.  * Parameter: on Hintergrundfarbe im aktiven Zustand
  189.  * off Hintergrundfarbe im inaktiven Zustand
  190.  * Return: -
  191.  *
  192.  * Definiert die Hintergrundfarben f黵 einen angezeigten Text. Hierbei k鰊nen
  193.  * zwei Farben f黵 den aktiven und den inaktiven Zustand definiert werden.
  194.  * Wird die zweite Farbe vergessen, wird sie mit der Hintergrundfarbe vor-
  195.  * definiert.
  196.  ****************************************************************************/
  197. void XPaneInfo::SetBkColor(COLORREF on, COLORREF off)
  198. {
  199. bkColor[1] = on;
  200. if (off != -1) bkColor[0] = off;
  201. else bkColor[0] = GetSysColor(COLOR_MENU);
  202. }
  203. /*****************************************************************************
  204.  * Klasse: XPaneInfo
  205.  * Funktion: SetBitmap, SetText, SetNumber
  206.  * Parameter: newBitmap Name des im Pane anzuzeigenden Bitmaps
  207.  * newText Im Pane anzuzeigender Text
  208.  * newNumber Im Pane anzuzeigende Nummer
  209.  * Return: -
  210.  *
  211.  * Mit diesen Funktionen werden die Bitmaps, Texte oder Nummern f黵 die
  212.  * Anzeige in dem aktuellen Pane gesetzt.
  213.  ****************************************************************************/
  214. void XPaneInfo::SetBitmap(LPCSTR newOnBitmap, LPCSTR newOffBitmap)
  215. {
  216. string[1] = newOnBitmap;
  217. string[0] = newOffBitmap;
  218. }
  219. void XPaneInfo::SetText(LPCSTR newOnText, LPCSTR newOffText)
  220. {
  221. string[1] = newOnText;
  222. string[0] = newOffText;
  223. }
  224. void XPaneInfo::SetNumber(int newOnNumber, int newOffNumber)
  225. {
  226. string[1].Format("%d", newOnNumber);
  227. string[0].Format("%d", newOffNumber);
  228. }
  229. /*****************************************************************************
  230.  * Klasse: XPaneInfo
  231.  * Funktion: HScroll, VScroll
  232.  * Parameter: rect Ausgaberechteck des aktuellen Panes
  233.  * maxWidth Maximale Breite, bzw. H鰄e beim Scrollen
  234.  * maxHeight (z. B. Textl鋘ge oder Bitmapbreite)
  235.  * nullValue Wert f黵 Turnaround
  236.  * Return: -
  237.  *
  238.  * Inkrementiert die jeweilige Scrollvariable, soda