SkinProgress.cpp
上传用户:jmtfjn
上传日期:2007-02-20
资源大小:85k
文件大小:240k
源码类别:

状态条

开发平台:

Visual C++

  1. /******************************************************************************/
  2. /* NAME              : SkinProgress.cpp                                       */
  3. /* PURPOSE           : Place a bitmapped progress bar into the status bar     */
  4. /* CREATED_BY        : Kochise (kochise@caramail.com)                         */
  5. /* CREATION_DATE     : $C_DATE=YYYY/MM/DD$ 22003/05/02                        */
  6. /* MODIFIED_BY       : Kochise (kochise@caramail.com)                         */
  7. /* MODIFICATION_DATE : $M_DATE=YYYY/MM/DD$ 2003/07/12                         */
  8. /* LANGUAGE          : MFC Visual C++ 6                                       */
  9. /* MPROC_TYPE        : Microsoft Windows compatible computer                  */
  10. /*                                                                            */
  11. /*
  12. $Log: E:ProjectsNoeZooArcSkinProgressTest.zooSkinProgressTestSkinProgress.cpp.adiff $
  13.  *
  14.  *   Rev 1.02 : July 12 2003 14:01:53 (Kochise)
  15.  * Base : CSkinProgress 1.32dev
  16.  *   extracting files : no error
  17.  *   parsing files : no error
  18.  *   diff engine : no error
  19.  *   modify.public.constructor:CSkinProgress
  20.  *   touch.protected.function:CreateCommon
  21.  *   modify.protected.function:ProgressInStatusBar
  22.  *   modify.protected.function:ProgressInDialog
  23.  *   modify.public.function:SetRange
  24.  *   touch.public.function:SetPos
  25.  *   modify.public.function:GetPos
  26.  *   touch.public.function:SetStart
  27.  *   modify.public.function:GetStart
  28.  *   modify.public.function:Reset
  29.  *   add.public.function:SetProgress
  30.  *   add.public.function:GetProgress
  31.  *   modify.public.function:RefreshPanes
  32.  *   touch.protected.function:CompactText
  33.  *   modify.protected.function:GetTimed
  34.  *   modify.protected.function:UpdateProgress
  35.  *   modify.protected.function:OnPaint
  36.  *   compiling project files : no error
  37.  *   packing files : no error
  38.  * http://www.codeproject.com/miscctrl/CSkinProgress.asp
  39.  *
  40.  *   Rev 1.01 : July 06 2003 22:08:37 (Kochise)
  41.  * Base : CSkinProgress 1.28 Devel
  42.  *   extracting files : no error
  43.  *   parsing files : no error
  44.  *   diff engine : no error
  45.  *   modify.public.constructor:CSkinProgress
  46.  *   add.public.constructor:CSkinProgress
  47.  *   modify.public.function:SetBitmap
  48.  *   modify.public.function:ConvBitmap
  49.  *   modify.public.function:SetRange
  50.  *   modify.public.function:SetPos
  51.  *   modify.public.function:OffsetPos
  52.  *   modify.public.function:StepIt
  53.  *   modify.public.function:SetSize
  54.  *   add.public.function:GetSize
  55.  *   add.public.function:GetPos
  56.  *   add.public.function:GetStep
  57.  *   add.public.function:GetLower
  58.  *   add.public.function:GetUpper
  59.  *   add.public.function:SetStart
  60.  *   add.public.function:GetStart
  61.  *   add.public.function:Reset
  62.  *   modify.public.function:SetText
  63.  *   mutate.function:protected.ResizeTextPane->public.RefreshPanes
  64.  *   modify.public.function:RefreshPanes
  65.  *   mutate.function:public.Clear->protected.Clear
  66.  *   add.protected.function:GetTargetRect
  67.  *   mutate.protected.function:Create->CreateCommon
  68.  *   modify.protected.function:CreateCommon
  69.  *   add.protected.function:ProgressInStatusBar
  70.  *   add.protected.function:ProgressInDialog
  71.  *   modify.protected.function:CompactText
  72.  *   add.protected.function:UpdateProgress
  73.  *   modify.protected.function:OnPaint
  74.  *   compiling project files : no error
  75.  *   packing files : no error
  76.  * http://www.codeproject.com/miscctrl/CSkinProgress.asp
  77.  *
  78.  *   Rev 1.00 : May 25 2003 13:25:12 (Kochise)
  79.  * First archived version and released onto CodeProject.
  80.  * Base : CSkinProgress 1.12 Devel
  81.  *   add.public.constructor:CSkinProgress
  82.  *   add.public.constructor:CSkinProgress
  83.  *   add.public.function:SetRange
  84.  *   add.public.function:SetText
  85.  *   add.public.function:SetSize
  86.  *   add.public.function:SetBitmap
  87.  *   add.public.function:CopyBitmap
  88.  *   add.public.function:ConvBitmap
  89.  *   add.public.function:SetPos
  90.  *   add.public.function:OffsetPos
  91.  *   add.public.function:SetStep
  92.  *   add.public.function:StepIt
  93.  *   add.public.function:Clear
  94.  *   add.public.destructor:~CSkinProgress
  95.  *   add.protected.function:Create
  96.  *   add.protected.function:GetStatusBar
  97.  *   add.protected.function:ResizeTextPane
  98.  *   add.protected.function:CompactText
  99.  *   add.protected.function:GetTimed
  100.  *   add.protected.function:OnEraseBkgnd
  101.  *   add.protected.function:OnPaint
  102.  *   add.protected.function:OnSizing
  103.  *   add.protected.function:OnSize
  104.  *   add.protected.function:OnTimer
  105.  *   compiling project files : no error
  106.  *   packing files : no error
  107.  * http://www.codeproject.com/useritems/CSkinProgress.asp
  108.  *
  109.  */
  110. /******************************************************************************/
  111. // SkinProgress.cpp : implementation file
  112. //
  113. #include "stdafx.h"
  114. #include "SkinProgress.h"
  115. #ifdef _DEBUG
  116. #define new DEBUG_NEW
  117. #undef THIS_FILE
  118. static char THIS_FILE[] = __FILE__;
  119. #endif
  120. /////////////////////////////////////////////////////////////////////////////
  121. // CSkinProgress
  122. // g_Global      : g_ = Global
  123. // i_Input       : i_ = Input
  124. // no z...
  125. // m_Member      : m_ = Member
  126. // o_Output      : o_ = Output
  127. // ...           : use your imagination
  128. // aArray        : a  = Array    (array)
  129. // bBool         : b  = Boolean  (boolean, true/false)
  130. // cConstant     : c  = Constant (constant, whatever...)
  131. // dDefine       : d  = Define   (simple define or defined value)
  132. // nNumber       : n  = Number   (char, long, int, whatever...)
  133. // oObject       : o  = Object   (C++ class)
  134. // pPointer      : p  = Pointer  (typicaly a 32 bits ulong address)
  135. // sStruct       : s  = Struct   (structure)
  136. // uUnion        : u  = Union    (join two or more values of the same size under a common name)
  137. // poRemoteClass : po = Pointer on Object
  138. // cdConstantDef : cd = Constant Define, typicaly a constant defined value
  139. // usUnionStruct : us = Union of Structures
  140. // ...           : use your imagination
  141. // o_psBitmap    : CBitmap::GetBitmap((BITMAP*) o_psBitmap); // s = BITMAP, p = *, o_ means it's an output
  142. // <Value>
  143. // [Function]
  144. // TYPICAL LIFE TIME
  145. // 
  146. // CSkinProgress(...) -------> StepIt() ----------------------------> ~CSkinProgress()   USER
  147. //   |                           |                                       |               SIDE
  148. // ..|...........................|.......................................|.........................
  149. //   |                           |                                       |
  150. //   '-> Create(...)             |                                       '-> Clear()     OBJECT
  151. //         |                     |                                                       SIDE
  152. //         +-> GetStatusBar()    |
  153. //         +-> SetRange(...)     |
  154. //         +-> SetBitmap(...)    '----------->
  155. //         '---------------------------------> RefreshPanes() --------,
  156. //         ,--------------------------------->   |                    |
  157. //         |                               ,->   |                    |
  158. //         |                               |     |                    |
  159. //         |                               |     +-> GetStatusBar()   |
  160. //         |                               |     +-> GetTimed(...)    |
  161. //         |                               |     '-> CompactText(...) |
  162. // ........|...............................|..........................|............................
  163. //         |                               |                          |                  WINDOWS
  164. //       OnSizing(...) -> OnSize(...)    OnEraseBkgnd(...)            '-> OnPaint()      SIDE
  165. #ifndef dCSP_RESOURCE_BITMAP
  166. /*** anAQUA_BITMAP ************************************************************/
  167. /* Purpose : The default embedded progress bar image, if resource bitmap not  */
  168. /*           used instead.                                                    */
  169. /* Unit    : unsigned char                                                    */
  170. /* Range   : [0-255] - LIMITED selection                                      */
  171. /* List    : None                                                             */
  172. /* Example : None                                                             */
  173. /******************************************************************************/
  174. unsigned char anAQUA_BITMAP[5760] =
  175. { // B,    G,    R,    A -> Set to 0xFF for CAlphaBlendBitmap
  176.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  177.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  178.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  179.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  180.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  181.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  182.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  183.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  184.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  185.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  186.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  187.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  188.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  189.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  190.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  191.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  192.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  193.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  194.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  195.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  196.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  197.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  198.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  199.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  200.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  201.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  202.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  203.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  204.   0xBD, 0xBD, 0xBD, 0xFF, 0xAC, 0x9C, 0x9B, 0xFF, 0x9F, 0x60, 0x5A, 0xFF, 0x9E, 0x38, 0x2B, 0xFF,
  205.   0xA2, 0x22, 0x00, 0xFF, 0xAA, 0x22, 0x00, 0xFF, 0xAB, 0x2B, 0x00, 0xFF, 0xAB, 0x2B, 0x00, 0xFF,
  206.   0xB1, 0x33, 0x00, 0xFF, 0xB1, 0x33, 0x00, 0xFF, 0xB1, 0x33, 0x00, 0xFF, 0xB1, 0x33, 0x00, 0xFF,
  207.   0xB1, 0x33, 0x00, 0xFF, 0xB1, 0x33, 0x00, 0xFF, 0xB1, 0x33, 0x00, 0xFF, 0xB1, 0x33, 0x00, 0xFF,
  208.   0xB1, 0x33, 0x00, 0xFF, 0xB1, 0x33, 0x00, 0xFF, 0xB1, 0x33, 0x00, 0xFF, 0xB1, 0x33, 0x00, 0xFF,
  209.   0xB1, 0x33, 0x00, 0xFF, 0xB1, 0x33, 0x00, 0xFF, 0xB1, 0x33, 0x00, 0xFF, 0xB1, 0x33, 0x00, 0xFF,
  210.   0xB1, 0x33, 0x00, 0xFF, 0xB1, 0x33, 0x00, 0xFF, 0xB1, 0x33, 0x00, 0xFF, 0xB1, 0x33, 0x00, 0xFF,
  211.   0xAB, 0x2B, 0x00, 0xFF, 0xB1, 0x33, 0x00, 0xFF, 0xAB, 0x38, 0x00, 0xFF, 0xA4, 0x46, 0x27, 0xFF,
  212.   0x9E, 0x65, 0x54, 0xFF, 0x99, 0x89, 0x86, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  213.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  214.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  215.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  216.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  217.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  218.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  219.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  220.   0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  221.   0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF,
  222.   0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF,
  223.   0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF,
  224.   0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF,
  225.   0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF,
  226.   0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xA9, 0x8A, 0x86, 0xFF, 0x9F, 0x40, 0x2E, 0xFF,
  227.   0xA5, 0x1C, 0x00, 0xFF, 0xB1, 0x2E, 0x00, 0xFF, 0xC8, 0x6D, 0x42, 0xFF, 0xD8, 0x91, 0x67, 0xFF,
  228.   0xDB, 0x9D, 0x76, 0xFF, 0xDD, 0xA2, 0x75, 0xFF, 0xDD, 0xA2, 0x75, 0xFF, 0xDD, 0xA2, 0x75, 0xFF,
  229.   0xDD, 0xA2, 0x75, 0xFF, 0xDD, 0xA2, 0x75, 0xFF, 0xDD, 0xA2, 0x75, 0xFF, 0xDD, 0xA2, 0x75, 0xFF,
  230.   0xDD, 0xA2, 0x75, 0xFF, 0xDD, 0xA2, 0x75, 0xFF, 0xDD, 0xA2, 0x75, 0xFF, 0xDD, 0xA2, 0x75, 0xFF,
  231.   0xDD, 0xA2, 0x75, 0xFF, 0xDD, 0xA2, 0x75, 0xFF, 0xDD, 0xA2, 0x75, 0xFF, 0xDD, 0xA2, 0x75, 0xFF,
  232.   0xDD, 0xA2, 0x75, 0xFF, 0xDD, 0xA2, 0x75, 0xFF, 0xDD, 0xA2, 0x75, 0xFF, 0xDD, 0xA2, 0x75, 0xFF,
  233.   0xDD, 0xA2, 0x75, 0xFF, 0xDD, 0xA2, 0x75, 0xFF, 0xDB, 0x9D, 0x76, 0xFF, 0xD9, 0x94, 0x6D, 0xFF,
  234.   0xC8, 0x6D, 0x42, 0xFF, 0xB1, 0x33, 0x00, 0xFF, 0xA5, 0x1C, 0x00, 0xFF, 0x97, 0x3D, 0x22, 0xFF,
  235.   0x8E, 0x6F, 0x6B, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF,
  236.   0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF,
  237.   0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF,
  238.   0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF,
  239.   0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF,
  240.   0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF,
  241.   0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF,
  242.   0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF,
  243.   0xC3, 0xC3, 0xC3, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  244.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  245.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  246.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  247.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  248.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xB4, 0xA5, 0xA2, 0xFF,
  249.   0xA1, 0x46, 0x2E, 0xFF, 0xAB, 0x2B, 0x00, 0xFF, 0xAF, 0x33, 0x00, 0xFF, 0xCE, 0x76, 0x42, 0xFF,
  250.   0xE0, 0xAB, 0x81, 0xFF, 0xE5, 0xB5, 0x89, 0xFF, 0xE7, 0xBC, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF,
  251.   0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF,
  252.   0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF,
  253.   0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF,
  254.   0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF,
  255.   0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF,
  256.   0xE7, 0xBC, 0x95, 0xFF, 0xE5, 0xB5, 0x89, 0xFF, 0xE3, 0xAF, 0x88, 0xFF, 0xD0, 0x7F, 0x4C, 0xFF,
  257.   0xB1, 0x33, 0x00, 0xFF, 0xAB, 0x2B, 0x00, 0xFF, 0x97, 0x3D, 0x22, 0xFF, 0x88, 0x78, 0x76, 0xFF,
  258.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  259.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  260.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  261.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  262.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  263.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  264.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  265.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  266.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  267.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  268.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  269.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  270.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  271.   0xCD, 0xCD, 0xCD, 0xFF, 0xA6, 0x6E, 0x5A, 0xFF, 0xAF, 0x33, 0x00, 0xFF, 0xB8, 0x3D, 0x00, 0xFF,
  272.   0xBB, 0x45, 0x00, 0xFF, 0xD4, 0x87, 0x44, 0xFF, 0xE4, 0xAD, 0x7B, 0xFF, 0xE5, 0xB3, 0x84, 0xFF,
  273.   0xE5, 0xB5, 0x89, 0xFF, 0xE6, 0xB8, 0x8C, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF,
  274.   0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF,
  275.   0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF,
  276.   0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF,
  277.   0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF,
  278.   0xE9, 0xBD, 0x95, 0xFF, 0xE9, 0xBD, 0x95, 0xFF, 0xE6, 0xB8, 0x8C, 0xFF, 0xE5, 0xB3, 0x84, 0xFF,
  279.   0xE4, 0xAD, 0x7B, 0xFF, 0xD8, 0x8E, 0x4E, 0xFF, 0xBB, 0x45, 0x00, 0xFF, 0xB8, 0x3D, 0x00, 0xFF,
  280.   0xB1, 0x33, 0x00, 0xFF, 0x89, 0x50, 0x3D, 0xFF, 0x99, 0x99, 0x99, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  281.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  282.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  283.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  284.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  285.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  286.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  287.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF,
  288.   0xCD, 0xCD, 0xCD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  289.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  290.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  291.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  292.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  293.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF, 0xA6, 0x50, 0x27, 0xFF,
  294.   0xBB, 0x45, 0x00, 0xFF, 0xBF, 0x4E, 0x00, 0xFF, 0xC1, 0x54, 0x00, 0xFF, 0xD4, 0x7A, 0x2E, 0xFF,
  295.   0xE1, 0xA2, 0x6A, 0xFF, 0xE5, 0xAC, 0x77, 0xFF, 0xE7, 0xB1, 0x7F, 0xFF, 0xE9, 0xB4, 0x85, 0xFF,
  296.   0xE9, 0xB6, 0x88, 0xFF, 0xE9, 0xB6, 0x88, 0xFF, 0xE9, 0xB6, 0x88, 0xFF, 0xE9, 0xB6, 0x88, 0xFF,
  297.   0xE9, 0xB6, 0x88, 0xFF, 0xE9, 0xB6, 0x88, 0xFF, 0xE9, 0xB6, 0x88, 0xFF, 0xE9, 0xB6, 0x88, 0xFF,
  298.   0xE9, 0xB6, 0x88, 0xFF, 0xE9, 0xB6, 0x88, 0xFF, 0xE9, 0xB6, 0x88, 0xFF, 0xE9, 0xB6, 0x88, 0xFF,
  299.   0xE9, 0xB6, 0x88, 0xFF, 0xE9, 0xB6, 0x88, 0xFF, 0xE9, 0xB6, 0x88, 0xFF, 0xE9, 0xB6, 0x88, 0xFF,
  300.   0xE9, 0xB6, 0x88, 0xFF, 0xE9, 0xB6, 0x88, 0xFF, 0xE9, 0xB6, 0x88, 0xFF, 0xE9, 0xB6, 0x88, 0xFF,
  301.   0xE5, 0xB3, 0x84, 0xFF, 0xE4, 0xAD, 0x7B, 0xFF, 0xE1, 0xA6, 0x72, 0xFF, 0xD4, 0x80, 0x38, 0xFF,
  302.   0xC1, 0x54, 0x00, 0xFF, 0xBF, 0x4E, 0x00, 0xFF, 0xBB, 0x45, 0x00, 0xFF, 0x9B, 0x46, 0x1C, 0xFF,
  303.   0x82, 0x82, 0x82, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  304.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  305.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  306.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  307.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  308.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  309.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  310.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  311.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  312.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  313.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  314.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  315.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  316.   0xBD, 0xBD, 0xBD, 0xFF, 0xB6, 0x4C, 0x00, 0xFF, 0xC1, 0x54, 0x00, 0xFF, 0xC5, 0x5C, 0x00, 0xFF,
  317.   0xCA, 0x63, 0x15, 0xFF, 0xD4, 0x73, 0x22, 0xFF, 0xD9, 0x7D, 0x2E, 0xFF, 0xDA, 0x84, 0x3B, 0xFF,
  318.   0xDF, 0x8A, 0x42, 0xFF, 0xE0, 0x8D, 0x48, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF,
  319.   0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF,
  320.   0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF,
  321.   0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF,
  322.   0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF,
  323.   0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE0, 0x8D, 0x48, 0xFF, 0xDA, 0x84, 0x3B, 0xFF,
  324.   0xD4, 0x7A, 0x2E, 0xFF, 0xCE, 0x6F, 0x22, 0xFF, 0xC5, 0x61, 0x15, 0xFF, 0xC5, 0x5C, 0x00, 0xFF,
  325.   0xB8, 0x55, 0x00, 0xFF, 0xB6, 0x4C, 0x00, 0xFF, 0x73, 0x73, 0x73, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  326.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  327.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  328.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  329.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  330.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  331.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  332.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  333.   0xD5, 0xD5, 0xD5, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  334.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  335.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  336.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  337.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  338.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xB6, 0x4C, 0x00, 0xFF,
  339.   0xC1, 0x54, 0x00, 0xFF, 0xC5, 0x5C, 0x00, 0xFF, 0xCA, 0x63, 0x15, 0xFF, 0xD4, 0x73, 0x22, 0xFF,
  340.   0xD9, 0x7D, 0x2E, 0xFF, 0xDA, 0x84, 0x3B, 0xFF, 0xDF, 0x8A, 0x42, 0xFF, 0xE0, 0x8D, 0x48, 0xFF,
  341.   0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF,
  342.   0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF,
  343.   0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF,
  344.   0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF,
  345.   0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF, 0xE5, 0x94, 0x4D, 0xFF,
  346.   0xE0, 0x8D, 0x48, 0xFF, 0xDA, 0x84, 0x3B, 0xFF, 0xD4, 0x7A, 0x2E, 0xFF, 0xCE, 0x6F, 0x22, 0xFF,
  347.   0xC5, 0x61, 0x15, 0xFF, 0xC5, 0x5C, 0x00, 0xFF, 0xB8, 0x55, 0x00, 0xFF, 0xB6, 0x4C, 0x00, 0xFF,
  348.   0x73, 0x73, 0x73, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  349.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  350.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  351.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  352.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  353.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  354.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  355.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  356.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  357.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  358.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  359.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  360.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  361.   0xB5, 0xB5, 0xB5, 0xFF, 0xB8, 0x55, 0x00, 0xFF, 0xC3, 0x5F, 0x15, 0xFF, 0xCC, 0x6A, 0x1C, 0xFF,
  362.   0xD4, 0x73, 0x22, 0xFF, 0xDE, 0x82, 0x35, 0xFF, 0xE3, 0x8C, 0x42, 0xFF, 0xEA, 0x96, 0x4D, 0xFF,
  363.   0xEB, 0x9B, 0x55, 0xFF, 0xED, 0x9E, 0x59, 0xFF, 0xF2, 0xA6, 0x61, 0xFF, 0xF2, 0xA6, 0x61, 0xFF,
  364.   0xF2, 0xA6, 0x61, 0xFF, 0xF2, 0xA6, 0x61, 0xFF, 0xF2, 0xA6, 0x61, 0xFF, 0xF2, 0xA6, 0x61, 0xFF,
  365.   0xF2, 0xA6, 0x61, 0xFF, 0xF2, 0xA6, 0x61, 0xFF, 0xF2, 0xA6, 0x61, 0xFF, 0xF2, 0xA6, 0x61, 0xFF,
  366.   0xF2, 0xA6, 0x61, 0xFF, 0xF2, 0xA6, 0x61, 0xFF, 0xF2, 0xA6, 0x61, 0xFF, 0xF2, 0xA6, 0x61, 0xFF,
  367.   0xF2, 0xA6, 0x61, 0xFF, 0xF2, 0xA6, 0x61, 0xFF, 0xF2, 0xA6, 0x61, 0xFF, 0xF2, 0xA6, 0x61, 0xFF,
  368.   0xF2, 0xA6, 0x61, 0xFF, 0xF2, 0xA6, 0x61, 0xFF, 0xED, 0x9E, 0x59, 0xFF, 0xE5, 0x94, 0x4D, 0xFF,
  369.   0xDF, 0x8A, 0x42, 0xFF, 0xD4, 0x7C, 0x33, 0xFF, 0xCE, 0x72, 0x22, 0xFF, 0xCC, 0x6A, 0x1C, 0xFF,
  370.   0xC3, 0x5F, 0x15, 0xFF, 0xB4, 0x54, 0x00, 0xFF, 0x67, 0x67, 0x67, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  371.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  372.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  373.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  374.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  375.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  376.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  377.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF,
  378.   0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  379.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  380.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  381.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  382.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  383.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xA9, 0x62, 0x2B, 0xFF,
  384.   0xCC, 0x6A, 0x1C, 0xFF, 0xD4, 0x73, 0x22, 0xFF, 0xDA, 0x7F, 0x35, 0xFF, 0xE4, 0x90, 0x46, 0xFF,
  385.   0xF1, 0x9D, 0x54, 0xFF, 0xF8, 0xA7, 0x60, 0xFF, 0xFB, 0xAC, 0x66, 0xFF, 0xFE, 0xB2, 0x6D, 0xFF,
  386.   0xFE, 0xB5, 0x74, 0xFF, 0xFE, 0xB5, 0x74, 0xFF, 0xFE, 0xB5, 0x74, 0xFF, 0xFE, 0xB5, 0x74, 0xFF,
  387.   0xFE, 0xB5, 0x74, 0xFF, 0xFE, 0xB5, 0x74, 0xFF, 0xFE, 0xB5, 0x74, 0xFF, 0xFE, 0xB5, 0x74, 0xFF,
  388.   0xFE, 0xB5, 0x74, 0xFF, 0xFE, 0xB5, 0x74, 0xFF, 0xFE, 0xB5, 0x74, 0xFF, 0xFE, 0xB5, 0x74, 0xFF,
  389.   0xFE, 0xB5, 0x74, 0xFF, 0xFE, 0xB5, 0x74, 0xFF, 0xFE, 0xB5, 0x74, 0xFF, 0xFE, 0xB5, 0x74, 0xFF,
  390.   0xFE, 0xB5, 0x74, 0xFF, 0xFE, 0xB5, 0x74, 0xFF, 0xFE, 0xB5, 0x74, 0xFF, 0xFE, 0xB5, 0x74, 0xFF,
  391.   0xFA, 0xAF, 0x6E, 0xFF, 0xEE, 0xA2, 0x5D, 0xFF, 0xE9, 0x96, 0x50, 0xFF, 0xDF, 0x8A, 0x42, 0xFF,
  392.   0xD4, 0x7C, 0x33, 0xFF, 0xCE, 0x72, 0x22, 0xFF, 0xC7, 0x69, 0x1C, 0xFF, 0xA0, 0x59, 0x22, 0xFF,
  393.   0x69, 0x69, 0x69, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  394.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  395.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  396.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  397.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  398.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  399.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  400.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  401.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  402.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  403.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  404.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  405.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  406.   0xC3, 0xC3, 0xC3, 0xFF, 0x9C, 0x73, 0x50, 0xFF, 0xCE, 0x72, 0x22, 0xFF, 0xD4, 0x7C, 0x33, 0xFF,
  407.   0xE1, 0x89, 0x3D, 0xFF, 0xF1, 0x9D, 0x54, 0xFF, 0xFB, 0xAC, 0x66, 0xFF, 0xFE, 0xB2, 0x6D, 0xFF,
  408.   0xFF, 0xBC, 0x74, 0xFF, 0xFF, 0xC4, 0x7C, 0xFF, 0xFF, 0xC7, 0x84, 0xFF, 0xFF, 0xC7, 0x84, 0xFF,
  409.   0xFF, 0xC7, 0x84, 0xFF, 0xFF, 0xC7, 0x84, 0xFF, 0xFF, 0xC7, 0x84, 0xFF, 0xFF, 0xC7, 0x84, 0xFF,
  410.   0xFF, 0xC7, 0x84, 0xFF, 0xFF, 0xC7, 0x84, 0xFF, 0xFF, 0xC7, 0x84, 0xFF, 0xFF, 0xC7, 0x84, 0xFF,
  411.   0xFF, 0xC7, 0x84, 0xFF, 0xFF, 0xC7, 0x84, 0xFF, 0xFF, 0xC7, 0x84, 0xFF, 0xFF, 0xC7, 0x84, 0xFF,
  412.   0xFF, 0xC7, 0x84, 0xFF, 0xFF, 0xC7, 0x84, 0xFF, 0xFF, 0xC7, 0x84, 0xFF, 0xFF, 0xC7, 0x84, 0xFF,
  413.   0xFF, 0xC7, 0x84, 0xFF, 0xFF, 0xC7, 0x84, 0xFF, 0xFF, 0xC4, 0x7C, 0xFF, 0xFE, 0xB2, 0x6D, 0xFF,
  414.   0xF5, 0xA5, 0x5E, 0xFF, 0xEA, 0x96, 0x4D, 0xFF, 0xDA, 0x84, 0x3B, 0xFF, 0xD4, 0x7C, 0x33, 0xFF,
  415.   0xCE, 0x72, 0x22, 0xFF, 0x83, 0x5A, 0x38, 0xFF, 0x82, 0x82, 0x82, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  416.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  417.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  418.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  419.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  420.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  421.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  422.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  423.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  424.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  425.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  426.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  427.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  428.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0x9B, 0x91, 0x88, 0xFF,
  429.   0xA3, 0x6A, 0x3B, 0xFF, 0xD4, 0x80, 0x38, 0xFF, 0xE4, 0x90, 0x46, 0xFF, 0xFB, 0xA6, 0x5A, 0xFF,
  430.   0xFF, 0xB8, 0x6E, 0xFF, 0xFF, 0xC4, 0x7C, 0xFF, 0xFF, 0xD0, 0x87, 0xFF, 0xFF, 0xCD, 0x8D, 0xFF,
  431.   0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF,
  432.   0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF,
  433.   0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF,
  434.   0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF,
  435.   0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF,
  436.   0xFF, 0xCD, 0x8D, 0xFF, 0xFF, 0xC4, 0x7C, 0xFF, 0xFE, 0xB2, 0x6D, 0xFF, 0xF1, 0xA0, 0x57, 0xFF,
  437.   0xE3, 0x8C, 0x42, 0xFF, 0xD4, 0x80, 0x38, 0xFF, 0x9E, 0x63, 0x33, 0xFF, 0x66, 0x5C, 0x54, 0xFF,
  438.   0xA5, 0xA5, 0xA5, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  439.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  440.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  441.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  442.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  443.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  444.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  445.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  446.   0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF,
  447.   0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF,
  448.   0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF,
  449.   0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF,
  450.   0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF,
  451.   0xE4, 0xE4, 0xE4, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0x8E, 0x7B, 0x6D, 0xFF, 0xA8, 0x6F, 0x40, 0xFF,
  452.   0xE4, 0x90, 0x46, 0xFF, 0xF9, 0xA8, 0x5F, 0xFF, 0xFF, 0xBC, 0x74, 0xFF, 0xFF, 0xCC, 0x82, 0xFF,
  453.   0xFF, 0xD5, 0x8C, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xE6, 0x9F, 0xFF, 0xFF, 0xE6, 0x9F, 0xFF,
  454.   0xFF, 0xE6, 0x9F, 0xFF, 0xFF, 0xE6, 0x9F, 0xFF, 0xFF, 0xE6, 0x9F, 0xFF, 0xFF, 0xE6, 0x9F, 0xFF,
  455.   0xFF, 0xE6, 0x9F, 0xFF, 0xFF, 0xE6, 0x9F, 0xFF, 0xFF, 0xE6, 0x9F, 0xFF, 0xFF, 0xE6, 0x9F, 0xFF,
  456.   0xFF, 0xE6, 0x9F, 0xFF, 0xFF, 0xE6, 0x9F, 0xFF, 0xFF, 0xE6, 0x9F, 0xFF, 0xFF, 0xE6, 0x9F, 0xFF,
  457.   0xFF, 0xE6, 0x9F, 0xFF, 0xFF, 0xE6, 0x9F, 0xFF, 0xFF, 0xE6, 0x9F, 0xFF, 0xFF, 0xE6, 0x9F, 0xFF,
  458.   0xFF, 0xE6, 0x9F, 0xFF, 0xFF, 0xE6, 0x9F, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xCC, 0x82, 0xFF,
  459.   0xFF, 0xBC, 0x74, 0xFF, 0xF5, 0xA5, 0x5E, 0xFF, 0xE4, 0x90, 0x46, 0xFF, 0xA3, 0x6A, 0x3B, 0xFF,
  460.   0x70, 0x5D, 0x4E, 0xFF, 0x7F, 0x7F, 0x7F, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF,
  461.   0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF,
  462.   0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF,
  463.   0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF,
  464.   0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF,
  465.   0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF,
  466.   0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF,
  467.   0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF,
  468.   0xF2, 0xF2, 0xF2, 0xFF, 0xF2, 0xF2, 0xF2, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  469.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  470.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  471.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  472.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  473.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF,
  474.   0xAC, 0xAC, 0xAC, 0xFF, 0x85, 0x7C, 0x74, 0xFF, 0x8C, 0x6A, 0x4C, 0xFF, 0xB8, 0x80, 0x50, 0xFF,
  475.   0xEC, 0xA3, 0x66, 0xFF, 0xFF, 0xBD, 0x7A, 0xFF, 0xFF, 0xC7, 0x84, 0xFF, 0xFF, 0xCD, 0x8D, 0xFF,
  476.   0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF,
  477.   0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF,
  478.   0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF,
  479.   0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF,
  480.   0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF, 0xFF, 0xDE, 0x97, 0xFF,
  481.   0xFF, 0xD5, 0x8C, 0xFF, 0xFF, 0xC4, 0x7C, 0xFF, 0xEC, 0xA3, 0x66, 0xFF, 0xB8, 0x80, 0x50, 0xFF,
  482.   0x85, 0x63, 0x44, 0xFF, 0x6A, 0x60, 0x59, 0xFF, 0x7F, 0x7F, 0x7F, 0xFF, 0xC3, 0xC3, 0xC3, 0xFF,
  483.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  484.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  485.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  486.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  487.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  488.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  489.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  490.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  491.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  492.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  493.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  494.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  495.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  496.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xB5, 0xB5, 0xB5, 0xFF,
  497.   0x91, 0x91, 0x91, 0xFF, 0x7F, 0x7F, 0x7F, 0xFF, 0x7F, 0x7F, 0x7F, 0xFF, 0x69, 0x69, 0x69, 0xFF,
  498.   0x67, 0x67, 0x67, 0xFF, 0x5C, 0x5C, 0x5C, 0xFF, 0x5C, 0x5C, 0x5C, 0xFF, 0x5C, 0x5C, 0x5C, 0xFF,
  499.   0x5C, 0x5C, 0x5C, 0xFF, 0x5C, 0x5C, 0x5C, 0xFF, 0x5C, 0x5C, 0x5C, 0xFF, 0x5C, 0x5C, 0x5C, 0xFF,
  500.   0x5C, 0x5C, 0x5C, 0xFF, 0x5C, 0x5C, 0x5C, 0xFF, 0x5C, 0x5C, 0x5C, 0xFF, 0x5C, 0x5C, 0x5C, 0xFF,
  501.   0x5C, 0x5C, 0x5C, 0xFF, 0x5C, 0x5C, 0x5C, 0xFF, 0x5C, 0x5C, 0x5C, 0xFF, 0x5C, 0x5C, 0x5C, 0xFF,
  502.   0x5C, 0x5C, 0x5C, 0xFF, 0x5C, 0x5C, 0x5C, 0xFF, 0x5C, 0x5C, 0x5C, 0xFF, 0x5C, 0x5C, 0x5C, 0xFF,
  503.   0x5C, 0x5C, 0x5C, 0xFF, 0x5C, 0x5C, 0x5C, 0xFF, 0x5C, 0x5C, 0x5C, 0xFF, 0x5C, 0x5C, 0x5C, 0xFF,
  504.   0x67, 0x67, 0x67, 0xFF, 0x69, 0x69, 0x69, 0xFF, 0x73, 0x73, 0x73, 0xFF, 0x91, 0x91, 0x91, 0xFF,
  505.   0xC3, 0xC3, 0xC3, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  506.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  507.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  508.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  509.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  510.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  511.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  512.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF,
  513.   0xED, 0xED, 0xED, 0xFF, 0xED, 0xED, 0xED, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  514.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  515.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  516.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  517.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  518.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  519.   0xE4, 0xE4, 0xE4, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF,
  520.   0xBD, 0xBD, 0xBD, 0xFF, 0xB5, 0xB5, 0xB5, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF,
  521.   0xAC, 0xAC, 0xAC, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF,
  522.   0xAC, 0xAC, 0xAC, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF,
  523.   0xAC, 0xAC, 0xAC, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF,
  524.   0xAC, 0xAC, 0xAC, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF,
  525.   0xAC, 0xAC, 0xAC, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF,
  526.   0xA5, 0xA5, 0xA5, 0xFF, 0xA5, 0xA5, 0xA5, 0xFF, 0xA5, 0xA5, 0xA5, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF,
  527.   0xBD, 0xBD, 0xBD, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  528.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  529.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  530.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  531.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  532.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  533.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  534.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  535.   0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF, 0xE4, 0xE4, 0xE4, 0xFF,
  536. };
  537. /*** sAQUA_BITMAP *************************************************************/
  538. /* Purpose : anAQUA_BITMAP's image header for CBitmap::CreateBitmapIndirect   */
  539. /* Unit    : BITMAP                                                           */
  540. /* Range   : structure list                                                   */
  541. /* List    :  0 - int            bmType       : bitmap type (0)               */
  542. /*            1 - int            bmWidth      : width  in pixels (>0)         */
  543. /*            2 - int            bmHeight     : height in pixels (>0)         */
  544. /*            3 - int            bmWidthBytes ; number of bytes per line (%2) */
  545. /*            4 - unsigned char  bmPlanes     ; number of color planes        */
  546. /*            5 - unsigned char  bmBitsPixel  : number of bits per pixel      */
  547. /*            6 - unsigned char* bmBits       : pointer to an array of shorts */
  548. /* Example : None                                                             */
  549. /* WARNING : I said SHORT for <bmBits> because the number of bytes must be    */
  550. /*           divible by 2 ! But in facts, it can be bytes, longs, whatever,   */
  551. /*           as long as the size of the array remains divisible by 2...       */
  552. /******************************************************************************/
  553. BITMAP sAQUA_BITMAP =
  554. {
  555.   0,            // bmType
  556.   90,           // bmWidth
  557.   16,           // bmHeight
  558.   360,          // bmWidthBytes
  559.   1,            // bmPlanes
  560.   32,           // bmBitsPixel
  561.   anAQUA_BITMAP // bmBits
  562. };
  563. #endif // dCSP_RESOURCE_BITMAP
  564. /*** anThreeDots **************************************************************/
  565. /* Purpose : dots for reduced string                                          */
  566. /* Unit    : char                                                             */
  567. /* Range   : [0-127] - LIMITED selection                                      */
  568. /* List    : None                                                             */
  569. /* Example : None                                                             */
  570. /******************************************************************************/
  571. const char anThreeDots[] = "...";
  572. // *** CONSTRUCTORS ***
  573. /*--- START FUNCTION HEADER --------------------------------------------------*/
  574. /* Name          : CSkinProgress                                              */
  575. /* Role          : Default constructor  for status bar usage                  */
  576. /* Type          : public                                                     */
  577. /* Interface     : RETURN (direct value)                                      */
  578. /*                   None                                                     */
  579. /*                 OUTPUT (pointer to value)                                  */
  580. /*                   None                                                     */
  581. /*                 INPUT  (pointer to value, direct/default value)            */
  582. /*                   None                                                     */
  583. /* Pre-condition : None                                                       */
  584. /* Constraints   : Sets the default values to                                 */
  585. /*                   i_poStrMessage = "Work in progress..."                   */
  586. /*                   i_nUpper       = 100          - from 0 to 100            */
  587. /*                   i_nProgress    = cSPT_PERCENT - DISPLAY PERCENT          */
  588. /*                   i_nPane        = 0            - Share the text pane      */
  589. /*                   i_nSize        = 200          - 200 pixels FORCED WIDTH  */
  590. /*                   i_poBitmap     = NULL         - USE EMBEDDED BITMAP      */
  591. /*                <> i_bReverse     = false        - normal display           */
  592. /* Behavior      : A - Create the progress bar using default parameters       */
  593. /*----------------------------------------------------------------------------*/
  594. /* PROC CSkinProgress                                                         */
  595. /*                                                                            */
  596. /* A..... Create a status progress bar with "Work in progress..." as text     */
  597. /*----------------------------------------------------------------------------*/
  598. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  599. CSkinProgress::CSkinProgress
  600. ( // Default constructor
  601. )
  602. {
  603.   // Init
  604.   // Process
  605. // A..... Create a default progress bar in Status Bar with "Work in progress..." as text
  606.   ProgressInStatusBar("Work in progress");
  607. }
  608. /*--- START FUNCTION HEADER --------------------------------------------------*/
  609. /* Name          : CSkinProgress                                              */
  610. /* Role          : Default constructor with parameters for status bar usage   */
  611. /* Type          : public                                                     */
  612. /* Interface     : RETURN (pointer to value, direct value)                    */
  613. /*                   None                                                     */
  614. /*                 OUTPUT (pointer to value)                                  */
  615. /*                   None                                                     */
  616. /*                 INPUT  (pointer to value, direct/default value)            */
  617. /*                   i_poStrMessage : The text message to display in pane 0   */
  618. /*                   i_nUpper       : Upper limit to reach 100% (0 at 0%)     */
  619. /*                   i_nProgress    : Progress completion message type        */
  620. /*                   i_nPane        : Pane number for the progress bar        */
  621. /*                   i_nSize        : Progress bar width in pixel IF pane 0   */
  622. /*                   i_poBitmap     : Replacement progress bar bitmap         */
  623. /*                <> i_bReverse     : Reverse display of the progress bar     */
  624. /* Pre-condition : None                                                       */
  625. /* Constraints   : At least, <i_poStrMessage> must be provided                */
  626. /* Behavior      : A - Create the progress bar using user's parameters        */
  627. /*----------------------------------------------------------------------------*/
  628. /* PROC CSkinProgress                                                         */
  629. /*                                                                            */
  630. /* A..... Create the progress bar using user's parameters                     */
  631. /*----------------------------------------------------------------------------*/
  632. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  633. CSkinProgress::CSkinProgress
  634. ( // Default constructor with parameters for status bar usage
  635.   LPCTSTR     i_poStrMessage, // Text to display
  636.   int         i_nUpper,       // = 100          : Default range from 0 to i_nUpper
  637.   int         i_nProgress,    // = cSPT_PERCENT : Message type to add to the text
  638.   int         i_nPane,        // = 0            : Pane number in which display the progress bar
  639.   int         i_nSize,        // = 200          : Size of the progress bar if in pane 0
  640.   CBitmap*    i_poBitmap      // = NULL         : Pointer to a user bitmap
  641. #ifdef dCSP_SLIDERBAR_METHOD
  642.  ,BOOL        i_bReverse      // = false        : Reverse display of the progress bar
  643. #endif // dCSP_SLIDERBAR_METHOD
  644. )
  645. {
  646.   // Init
  647.   // Process
  648. // A..... Create the progress bar using user's parameters
  649.   ProgressInStatusBar
  650.   (
  651.     i_poStrMessage,
  652.     i_nUpper,
  653.     i_nProgress,
  654.     i_nPane,
  655.     i_nSize,
  656.     i_poBitmap
  657. #ifdef dCSP_SLIDERBAR_METHOD
  658.    ,i_bReverse
  659. #endif // dCSP_SLIDERBAR_METHOD
  660.   );
  661. }
  662. /*--- START FUNCTION HEADER --------------------------------------------------*/
  663. /* Name          : CSkinProgress                                              */
  664. /* Role          : Default constructor with parameters for dialog usage       */
  665. /* Type          : public                                                     */
  666. /* Interface     : RETURN (direct value)                                      */
  667. /*                   None                                                     */
  668. /*                 OUTPUT (pointer to value)                                  */
  669. /*                   None                                                     */
  670. /*                 INPUT  (pointer to value, direct/default value)            */
  671. /*                   i_poWndProgress : The CWnd where to display the progress */
  672. /*                   i_nUpper        : Upper limit to reach 100% (0 at 0%)    */
  673. /*                   i_poBitmap      : Replacement progress bar bitmap        */
  674. /*                <> i_bReverse      : Reverse display of the progress bar    */
  675. /*                   i_poWndMessage  : The CWnd where to display the text     */
  676. /*                   i_poStrMessage  : The text message to display            */
  677. /*                   i_nProgress     : Progress completion message type       */
  678. /* Pre-condition : None                                                       */
  679. /* Constraints   : At least, <i_poStrMessage> must be provided                */
  680. /* Behavior      : A - Create the dialog progress bar using user's parameters */
  681. /*----------------------------------------------------------------------------*/
  682. /* PROC CSkinProgress                                                         */
  683. /*                                                                            */
  684. /* A..... Create the dialog progress bar using user's parameters              */
  685. /*----------------------------------------------------------------------------*/
  686. /* The most simple dialog CSkinProgress constructor :                         */
  687. /*   CSkinProgress oCspBar(&oCStatic); // Use 100 as upper limit              */
  688. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  689. #ifdef dCSP_DIALOG_PROGRESS
  690. CSkinProgress::CSkinProgress
  691. ( // Default constructor with parameters for dialog usage
  692.   CWnd*       i_poWndProgress, // Pointer to the anchor CWnd to use for the progress bar
  693.   int         i_nUpper,        // = 100,      : Default range from 0 to i_nUpper
  694.   CBitmap*    i_poBitmap,      // = NULL      : Pointer to a user bitmap
  695. #ifdef dCSP_SLIDERBAR_METHOD
  696.   BOOL        i_bReverse,      // = false,    : Reverse display of the progress bar
  697. #endif // dCSP_SLIDERBAR_METHOD
  698.   CWnd*       i_poWndMessage,  // = NULL,     : Pointer to the anchor CWnd to use for the text pane
  699.   LPCTSTR     i_poStrMessage,  // = NULL      : Text to display,
  700.   int         i_nProgress      // = cSPT_NONE : Message type to add to the text
  701. )
  702. {
  703.   // Init
  704.   // Process
  705. // A..... Create the progress bar using user's parameters
  706.   ProgressInDialog
  707.   (
  708.     i_poWndProgress,
  709.     i_nUpper, 
  710.     i_poBitmap,
  711. #ifdef dCSP_SLIDERBAR_METHOD
  712.     i_bReverse,
  713. #endif // dCSP_SLIDERBAR_METHOD
  714.     i_poWndMessage,
  715.     i_poStrMessage,
  716.     i_nProgress
  717.   );
  718. }
  719. #endif // dCSP_DIALOG_PROGRESS
  720. // *** INITIALIZATORS ***
  721. /*--- START FUNCTION HEADER --------------------------------------------------*/
  722. /* Name          : CreateCommon                                               */
  723. /* Role          : Initialize the progress with its basic parameters          */
  724. /* Type          : PROTECTED                                                  */
  725. /* Interface     : RETURN (direct value)                                      */
  726. /*                   BOOL = false : Error during progress bar creation        */
  727. /*                          true  : Progress bar created                      */
  728. /*                 OUTPUT (pointer to value)                                  */
  729. /*                   None                                                     */
  730. /*                 INPUT  (pointer to value, direct/default value)            */
  731. /*                   i_poStrMessage  : The text message to display in pane 0  */
  732. /*                   i_nUpper        : Upper limit to reach 100% (0 at 0%)    */
  733. /*                   i_nProgress     : Progress completion message type       */
  734. /*                   i_poBitmap      : Replacement progress bar bitmap        */
  735. /*                <> i_bReverse      : Reverse display of the progress bar    */
  736. /* Pre-condition : None                                                       */
  737. /* Constraints   : Base of progress bar is fixed to 0, must use               */
  738. /*                 [SetRange(...)] to change it...                            */
  739. /* Behavior      : A - Set base values                                        */
  740. /*                 B - Set the bitmap                                         */
  741. /*                 C - Set the progress bar values                            */
  742. /*                 D - Get the creation date and time of the progress bar     */
  743. /*                 E - Set the refresh timer                                  */
  744. /*                 F - Resize the text and display the whole things           */
  745. /*----------------------------------------------------------------------------*/
  746. /* PROC CreateCommon                                                          */
  747. /*                                                                            */
  748. /* A..... Set base values                                                     */
  749. /* B..... Set the bitmap                                                      */
  750. /* C..... Set the progress bar values                                         */
  751. /* D..... Get the creation date and time of the progress bar                  */
  752. /* E..... Set the refresh timer to 500 milliseconds                           */
  753. /* F..... Resize the text and display the whole things                        */
  754. /*----------------------------------------------------------------------------*/
  755. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  756. BOOL CSkinProgress::CreateCommon
  757. (
  758.   LPCTSTR  i_poStrMessage,
  759.   int      i_nUpper,       // = 100
  760.   int      i_nProgress,    // = cSPT_PERCENT
  761.   CBitmap* i_poBitmap      // = NULL
  762. #ifdef dCSP_SLIDERBAR_METHOD
  763.  ,BOOL     i_bReverse      // = false
  764. #endif // dCSP_SLIDERBAR_METHOD
  765. )
  766. {
  767.   // Init
  768. // A..... Set base values
  769.   m_poBaseBmp       = NULL;
  770.   m_poCompatibleBmp = NULL;
  771.   m_poStretchBmp    = NULL;
  772.   m_poProgressBmp   = NULL;
  773.   m_oStrPrevMessage = "";
  774.   m_oRectPane.SetRect(0, 0, 0, 0);
  775. // Process + Return
  776. // B..... Set the bitmap
  777.   if(
  778.       !SetBitmap
  779.       (
  780.         i_poBitmap
  781. #ifndef dCSP_TIMED_REDRAW
  782.        ,false
  783. #endif // dCSP_TIMED_REDRAW
  784.       )
  785.     )
  786.   {
  787.     return false;
  788.   }
  789.   else
  790.   {
  791. // C..... Set the progress bar values
  792.     // Set the progress text type
  793.     m_nProgressText = i_nProgress;
  794.     // Set range and step
  795.     m_nLower = 0; // Set first parameters for the resampling
  796.     ASSERT(i_nUpper > 0); // m_nLower is 0, m_nUpper CANNOT BE BEFORE m_nLower quite now
  797.     m_nUpper = i_nUpper;
  798. #ifdef dCSP_SLIDERBAR_METHOD
  799.     m_nLeft  = 0;
  800. #endif // dCSP_SLIDERBAR_METHOD
  801.     m_nRight = 0;
  802.     SetRange
  803.     (
  804.       0,
  805.       i_nUpper,
  806.       1,
  807.       false
  808. #ifndef dCSP_TIMED_REDRAW
  809.      ,false // Don't resample range, and avoid display there !
  810. #endif // dCSP_TIMED_REDRAW
  811.     );
  812.     // Set and save additional values
  813.     m_oStrMessage = i_poStrMessage;
  814. #ifdef dCSP_SLIDERBAR_METHOD
  815.     m_bReverse    = i_bReverse;
  816. #endif // dCSP_SLIDERBAR_METHOD
  817. // D..... Get the creation date and time of the progress bar and set its position to the beginning
  818.     Reset
  819.     (
  820. #ifndef dCSP_TIMED_REDRAW
  821.       false
  822. #endif // dCSP_TIMED_REDRAW
  823.     );
  824. // E..... Set the refresh timer to 500 milliseconds (or 20ms/50Hz in <dCSP_TIMED_REDRAW> mode)
  825. #ifndef dCSP_TIMED_REDRAW
  826.     SetTimer((UINT) this, 500, NULL); // Use object's unique address as timer identifier
  827. #else
  828.     SetTimer((UINT) this,  20, NULL); // Use object's unique address as timer identifier
  829. #endif // dCSP_TIMED_REDRAW
  830. // F..... Resize the text and display the whole things
  831.     RefreshPanes(); // Set the text in pane 0 and do the first drawing of the SkinProgress bar
  832.     return true;
  833.   }
  834. }
  835. /*--- START FUNCTION HEADER --------------------------------------------------*/
  836. /* Name          : ProgressInStatusBar                                        */
  837. /* Role          : Create the progress in status bar with basic parameters    */
  838. /* Type          : PROTECTED                                                  */
  839. /* Interface     : RETURN (direct value)                                      */
  840. /*                   BOOL = false : Error during progress bar creation        */
  841. /*                          true  : Progress bar created                      */
  842. /*                 OUTPUT (pointer to value)                                  */
  843. /*                   None                                                     */
  844. /*                 INPUT  (pointer to value, direct/default value)            */
  845. /*                   i_poStrMessage  : The text message to display in pane 0  */
  846. /*                   i_nUpper        : Upper limit to reach 100% (0 at 0%)    */
  847. /*                   i_nProgress     : Progress completion message type       */
  848. /*                   i_nPane         : Pane number for the progress bar       */
  849. /*                   i_nSize         : Progress bar width in pixel IF pane 0  */
  850. /*                   i_poBitmap      : Replacement progress bar bitmap        */
  851. /*                <> i_bReverse      : Reverse display of the progress bar    */
  852. /* Pre-condition : None                                                       */
  853. /* Constraints   : Base of progress bar is fixed to 0, must use [SetRange] to */
  854. /*                 change it...                                               */
  855. /* Behavior      : A - Get status bar handler                                 */
  856. /*                 B - Create a CStatic object upon the target pane           */
  857. /*                 C - Specific Status Bar initialization                     */
  858. /*                 D - Create and initialize the progress bar                 */
  859. /*----------------------------------------------------------------------------*/
  860. /* PROC ProgressInStatusBar                                                   */
  861. /*                                                                            */
  862. /* A..... Get status bar handler                                              */
  863. /* [IF there is a status bar]                                                 */
  864. /* : B..... Create a CStatic object upon the target status bar pane           */
  865. /* : [IF CStatic creation OK]                                                 */
  866. /* : : C..... Specific Status Bar initialization                              */
  867. /* : : D..... Create and initialize the progress bar                          */
  868. /* : [ENDIF]                                                                  */
  869. /* [ENDIF]                                                                    */
  870. /*----------------------------------------------------------------------------*/
  871. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  872. BOOL CSkinProgress::ProgressInStatusBar
  873. ( // The initialization routine
  874.   LPCTSTR     i_poStrMessage,  // Text to display
  875.   int         i_nUpper,        // = 100,         : Default range from 0 to i_nUpper
  876.   int         i_nProgress,     // = cSPT_PERCENT : Message type to add to the text
  877.   int         i_nPane,         // = 0,           : Pane number in which display the progress bar
  878.   int         i_nSize,         // = 200,         : Size of the progress bar if in pane 0
  879.   CBitmap*    i_poBitmap       // = NULL         : Pointer to a user bitmap
  880. #ifdef dCSP_SLIDERBAR_METHOD
  881.  ,BOOL        i_bReverse       // = false
  882. #endif // dCSP_SLIDERBAR_METHOD
  883. )
  884. {
  885.   BOOL        bSuccess;
  886.   CStatusBar* poStatusBar;
  887.   DWORD       nStyleEx;
  888.   DWORD       nStyle;
  889.   CRect       oRectPane;
  890.   LPCSTR      poStrClass;
  891.   UINT        nClassStyle;
  892.   // Init
  893.   bSuccess          = false;
  894. #ifdef dCSP_DIALOG_PROGRESS
  895.   m_poWndProgress   = NULL;
  896.   m_poWndMessage    = NULL;
  897. #endif // dCSP_DIALOG_PROGRESS
  898.   // Process
  899. // A..... Get status bar handler
  900.   poStatusBar = GetStatusBar();
  901.   if(poStatusBar != NULL)
  902.   {
  903. // B..... Create a CStatic object upon the target status bar pane
  904.     // Set the style for the custom progress bas
  905.     nClassStyle = 0; // CS_CLASSDC | CS_HREDRAW | CS_VREDRAW;
  906.     nStyleEx   = WS_EX_STATICEDGE;
  907.     nStyle     = WS_CHILD | WS_VISIBLE | SS_BITMAP | SS_CENTERIMAGE;
  908.     // Get CRect coordinates for requested status bar pane
  909.     poStatusBar->GetItemRect(i_nPane, &oRectPane);
  910.     // Create the progress bar
  911.     poStrClass = AfxRegisterWndClass(nClassStyle, AfxGetApp()->LoadStandardCursor(IDC_WAIT));
  912.     bSuccess   = CStatic::CreateEx(nStyleEx, poStrClass, "", nStyle, oRectPane, poStatusBar, (UINT) this); // Use object's unique address as child window identifier
  913.     ASSERT(bSuccess);
  914.     if(!bSuccess)
  915.     {
  916.       return false;
  917.     }
  918.     else
  919.     {
  920. #ifdef dCSP_VERTICAL_BAR
  921. #ifndef dCSP_DISPLAY_STRETCH
  922.       m_bVertical = false; // *ALWAYS false IN CSkinProgress while in StatusBar mode*
  923. #else
  924.       m_bVertical = true;  // *FORCE* vertical for m_poStretchBmp analysis
  925. #endif // dCSP_DISPLAY_STRETCH
  926. #endif // dCSP_VERTICAL_BAR
  927. // C..... Specific Status Bar initialization
  928.       SetSize
  929.       (
  930.         i_nSize
  931. #ifndef dCSP_TIMED_REDRAW
  932.        ,false // Set the size, and avoid display there !
  933. #endif // dCSP_TIMED_REDRAW
  934.       );
  935.       m_nPane        = i_nPane;
  936.       m_oStrPrevText = poStatusBar->GetPaneText(m_nPane); // Get the previous pane's text
  937.      
  938. // D..... Create and initialize the progress bar
  939.       bSuccess = CreateCommon
  940.       (
  941.         i_poStrMessage,
  942.         i_nUpper,
  943.         i_nProgress,
  944.         i_poBitmap
  945. #ifdef dCSP_SLIDERBAR_METHOD
  946.        ,i_bReverse
  947. #endif // dCSP_SLIDERBAR_METHOD
  948.       );
  949.       return bSuccess;
  950.     }
  951.   }
  952.   else
  953.   {
  954.     return false;
  955.   }
  956. }
  957. /*--- START FUNCTION HEADER --------------------------------------------------*/
  958. /* Name          : ProgressInDialog                                           */
  959. /* Role          : Create the progress bar in a dialog with basic parameters  */
  960. /* Type          : PROTECTED                                                  */
  961. /* Interface     : RETURN (direct value)                                      */
  962. /*                   BOOL = false : Error during progress bar creation        */
  963. /*                          true  : Progress bar created                      */
  964. /*                 OUTPUT (pointer to value)                                  */
  965. /*                   None                                                     */
  966. /*                 INPUT  (pointer to value, direct/default value)            */
  967. /*                   i_poWndProgress : The CWnd where to display the progress */
  968. /*                   i_nUpper        : Upper limit to reach 100% (0 at 0%)    */
  969. /*                   i_poBitmap      : Replacement progress bar bitmap        */
  970. /*                <> i_bReverse      : Reverse display of the progress bar    */
  971. /*                   i_poWndMessage  : The CWnd where to display the text     */
  972. /*                   i_poStrMessage  : The text message to display in pane 0  */
  973. /*                   i_nProgress     : Progress completion message type       */
  974. /* Pre-condition : None                                                       */
  975. /* Constraints   : Base of progress bar is fixed to 0, must use [SetRange] to */
  976. /*                 change it...                                               */
  977. /* Behavior      : A - Get status bar handler                                 */
  978. /*                 B - Create a CStatic object upon the target pane           */
  979. /*                 C - Set the <m_bVertical> flag                             */
  980. /*                 D - Specific Status Bar initialization                     */
  981. /*                 E - Create and initialize the progress bar                 */
  982. /*----------------------------------------------------------------------------*/
  983. /* PROC ProgressInDialog                                                      */
  984. /*                                                                            */
  985. /* A..... Specific Dialog initialization                                      */
  986. /* B..... Create a CStatic object upon the target CWnd progress bar pane      */
  987. /* [IF CStatic creation OK]                                                   */
  988. /* : C..... Set the <m_bVertical> flag if the progress bar pane is vertical   */
  989. /* : [IF there is a CWnd anchor for a text pane to create]                    */
  990. /* : : D..... Specific Status Bar initialization                              */
  991. /* : [ENDIF]                                                                  */
  992. /* : E..... Create and initialize the progress bar                            */
  993. /* [ENDIF]                                                                    */
  994. /*----------------------------------------------------------------------------*/
  995. /* Well, sorry, I put <i_bReverse> in the middle of the function call, but    */
  996. /* there is an obvious reason : If you want to bypass the message's Cwnd,     */
  997. /* you can leave the ending parameters empty ! But if I had put <i_bReverse>  */
  998. /* on the end, you had to force every text related parameter to NULL before   */
  999. /* being able to set the <i_bReverse> value.                                  */
  1000. /*                                                                            */
  1001. /* You can also use yourself the <dCSP_SLIDERBAR_METHOD> define to compile    */
  1002. /* your own code according to your needs (as long as you include the .h) !    */
  1003. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  1004. #ifdef dCSP_DIALOG_PROGRESS
  1005. BOOL CSkinProgress::ProgressInDialog
  1006. ( // The initialization routine
  1007.   CWnd*       i_poWndProgress,
  1008.   int         i_nUpper,        // = 100,      : Default range from 0 to i_nUpper
  1009.   CBitmap*    i_poBitmap,      // = NULL      : Pointer to a user bitmap
  1010. #ifdef dCSP_SLIDERBAR_METHOD
  1011.   BOOL        i_bReverse,      // = false
  1012. #endif // dCSP_SLIDERBAR_METHOD
  1013.   CWnd*       i_poWndMessage,  // = NULL
  1014.   LPCTSTR     i_poStrMessage,  // = NULL      : Text to display
  1015.   int         i_nProgress      // = cSPT_NONE : Message type to add to the text
  1016. )
  1017. {
  1018.   BOOL        bSuccess;
  1019.   DWORD       nStyleEx;
  1020.   DWORD       nStyle;
  1021.   CRect       oRectPane;
  1022.   LPCSTR      poStrClass;
  1023.   UINT        nClassStyle;
  1024.   // Init
  1025.   bSuccess        = false;
  1026. // A..... Specific Dialog initialization
  1027.   m_poWndProgress = i_poWndProgress;
  1028.   m_poWndMessage  = i_poWndMessage;
  1029.   // Process + Return
  1030. // B..... Create a CStatic object upon the target CWnd progress bar pane
  1031.   // Set the style for the custom progress bas
  1032.   nClassStyle = 0; // CS_CLASSDC | CS_HREDRAW | CS_VREDRAW;
  1033.   nStyleEx    = WS_EX_STATICEDGE;
  1034.   nStyle      = WS_CHILD | WS_VISIBLE | SS_BITMAP | SS_CENTERIMAGE;
  1035.   // Get CRect coordinates for requested target CWnd bar pane
  1036.   GetTargetRect(&oRectPane);
  1037.   // Create the progress bar
  1038.   poStrClass = AfxRegisterWndClass(nClassStyle, AfxGetApp()->LoadStandardCursor(IDC_WAIT));
  1039.   bSuccess   = CStatic::CreateEx
  1040.   (
  1041.     nStyleEx,
  1042.     poStrClass,
  1043.     "",
  1044.     nStyle,
  1045.     oRectPane,
  1046.     m_poWndProgress->GetParent(), // Attach it not the the CWnd anchor (thus getting in its client area) but to its parent to overlap it
  1047.     (UINT) this // Use object's unique address as child window identifier
  1048.   );
  1049.   ASSERT(bSuccess);
  1050.   if(!bSuccess)
  1051.   {
  1052.     return false;
  1053.   }
  1054.   else
  1055.   {
  1056. // C..... Set the <m_bVertical> flag if the progress bar pane is vertical
  1057. #ifdef dCSP_VERTICAL_BAR
  1058. #ifndef dCSP_DISPLAY_STRETCH
  1059.     if(oRectPane.Height() > oRectPane.Width())
  1060.     { // VERTICAL
  1061.       m_bVertical = true;
  1062.     }
  1063.     else
  1064.     {
  1065.       m_bVertical = false;
  1066.     }
  1067. #else
  1068.     m_bVertical = true;  // *FORCE* vertical for <m_poStretchBmp> analysis
  1069. #endif // dCSP_DISPLAY_STRETCH
  1070. #endif // dCSP_VERTICAL_BAR
  1071.     if(m_poWndMessage != NULL)
  1072.     {
  1073. // D..... Specific Status Bar initialization
  1074.       m_poWndMessage->GetWindowText(m_oStrPrevText); // Get the previous pane's text
  1075.     }else{}
  1076.     if(bSuccess)
  1077.     {
  1078. // E..... Create and initialize the progress bar
  1079.       bSuccess = CreateCommon
  1080.       (
  1081.         i_poStrMessage,
  1082.         i_nUpper,
  1083.         i_nProgress,
  1084.         i_poBitmap
  1085. #ifdef dCSP_SLIDERBAR_METHOD
  1086.        ,i_bReverse
  1087. #endif // dCSP_SLIDERBAR_METHOD
  1088.       );
  1089.     }else{}
  1090.     return bSuccess;
  1091.   }
  1092. }
  1093. #endif // dCSP_DIALOG_PROGRESS
  1094. // *** DESCTRUCTOR ***
  1095. /*--- START FUNCTION HEADER --------------------------------------------------*/
  1096. /* Name          : ~CSkinProgress                                             */
  1097. /* Role          : Destructor, restore the inital states and used memory      */
  1098. /* Type          : public                                                     */
  1099. /* Interface     : RETURN (direct value)                                      */
  1100. /*                   None                                                     */
  1101. /*                 OUTPUT (pointer to value)                                  */
  1102. /*                   None                                                     */
  1103. /*                 INPUT  (pointer to value, direct/default value)            */
  1104. /*                   None                                                     */
  1105. /* Pre-condition : None                                                       */
  1106. /* Constraints   : None                                                       */
  1107. /* Behavior      : A - Clear the progress bar                                 */
  1108. /*                 B - Delete the refresh timer                               */
  1109. /*                 C - Delete the base bitmap                                 */
  1110. /*                 C - Delete the client DC compatible base bitmap            */
  1111. /*                 D - Delete the stretched for image list bitmap             */
  1112. /*                 E - Delete the displayed progress bar bitmap               */
  1113. /*----------------------------------------------------------------------------*/
  1114. /* PROC ~CSkinProgress                                                        */
  1115. /*                                                                            */
  1116. /* A..... Clear the progress bar                                              */
  1117. /* B..... Delete the refresh timer                                            */
  1118. /* C..... Delete the <m_poBaseBmp> base bitmap                                */
  1119. /* D..... Delete the <m_poCompatibleBmp> client DC compatible base bitmap     */
  1120. /* E..... Delete the <m_poStretchBmp> stretched for image list bitmap         */
  1121. /* F..... Delete the <m_poProgressBmp> displayed progress bar bitmap          */
  1122. /*----------------------------------------------------------------------------*/
  1123. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  1124. CSkinProgress::~CSkinProgress
  1125. ( // Destructor
  1126. )
  1127. {
  1128.   // Init
  1129.   // Process
  1130. // A..... Clear the progress bar
  1131.   Clear();
  1132. // B..... Delete the refresh timer
  1133.   if(IsWindow(this->m_hWnd)) // Test first if <this> is the correct address of the object before using it as the right timer identifier
  1134.   {
  1135.     KillTimer((UINT) this); // Use object's unique address as timer identifier
  1136.   }else{}
  1137. // C..... Delete the <m_poBaseBmp> base bitmap
  1138.   if(m_poBaseBmp != NULL)
  1139.   { // Delete the attached base bitmap
  1140.     delete m_poBaseBmp;
  1141.   }else{}
  1142. // D..... Delete the <m_poCompatibleBmp> client DC compatible base bitmap
  1143.   if(m_poCompatibleBmp != NULL)
  1144.   { // Delete the attached client DC compatible base bitmap
  1145.     delete m_poCompatibleBmp;
  1146.   }else{}
  1147. // E..... Delete the <m_poStretchBmp> stretched for image list bitmap
  1148.   if(m_poStretchBmp != NULL)
  1149.   { // Delete the attached stretched image list bitmap
  1150.     delete m_poStretchBmp;
  1151.   }else{}
  1152. // F..... Delete the <m_poProgressBmp> displayed progress bar bitmap
  1153.   if(m_poProgressBmp != NULL)
  1154.   { // Delete the attached progress bitmap
  1155.     delete m_poProgressBmp;
  1156.   }else{}
  1157. }
  1158. // *** CLEANER ***
  1159. /*--- START FUNCTION HEADER --------------------------------------------------*/
  1160. /* Name          : Clear                                                      */
  1161. /* Role          : Erase the progress                                         */
  1162. /* Type          : PROTECTED                                                  */
  1163. /* Interface     : RETURN (direct value)                                      */
  1164. /*                   None                                                     */
  1165. /*                 OUTPUT (pointer to value)                                  */
  1166. /*                   None                                                     */
  1167. /*                 INPUT  (pointer to value, direct/default value)            */
  1168. /*                   None                                                     */
  1169. /* Pre-condition : None                                                       */
  1170. /* Constraints   : None                                                       */
  1171. /* Behavior      : A - Delete the progress bar                                */
  1172. /*                 B - Set IDLE message in pane 0                             */
  1173. /*                 C - Set previous message in user pane                      */
  1174. /*                 D - Display the changes                                    */
  1175. /*                 E - Set previous message                                   */
  1176. /*----------------------------------------------------------------------------*/
  1177. /* PROC Clear                                                                 */
  1178. /*                                                                            */
  1179. /* [IF the object is still alive]                                             */
  1180. /* : A..... Delete the progress bar                                           */
  1181. /* : [IF status bar]                                                          */
  1182. /* : : B..... Set IDLE message in pane 0                                      */
  1183. /* : : C..... Set previous message in user pane                               */
  1184. /* : : D..... Display the changes                                             */
  1185. /* : [ELSE]                                                                   */
  1186. /* : : [IF there is a text CWnd]                                              */
  1187. /* : : : E..... Set previous message                                          */
  1188. /* : : [ENDIF]                                                                */
  1189. /* : [ENDIF]                                                                  */
  1190. /* [ENDIF]                                                                    */
  1191. /*----------------------------------------------------------------------------*/
  1192. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  1193. void CSkinProgress::Clear
  1194. ( // Deletion of the progress bar, restoration of the context
  1195. )
  1196. {
  1197.   CStatusBar* poStatusBar;
  1198.   //
  1199.   if(IsWindow(GetSafeHwnd()))
  1200.   {
  1201. // A..... Delete the progress bar
  1202.     ModifyStyle(WS_VISIBLE, 0); // Clear the attached CStatic progress bar
  1203.     DestroyWindow(); // Destroy it
  1204. #ifdef dCSP_DIALOG_PROGRESS
  1205.     if(m_poWndProgress == NULL)
  1206.     { // If in Status Bar, reset pane 0 and delete the progress bar
  1207. #endif // dCSP_DIALOG_PROGRESS
  1208.       poStatusBar = GetStatusBar();
  1209.       if(poStatusBar != NULL)
  1210.       {
  1211. // B..... Set IDLE message in pane 0
  1212.         m_oStrMessage.LoadString(AFX_IDS_IDLEMESSAGE); // Get the IDLE_MESSAGE and place 顃 in the status bar 
  1213.         poStatusBar->SetPaneText(0, m_oStrMessage);
  1214. // C..... Set previous message in user pane
  1215.         if(m_nPane != 0)
  1216.         { // If not the text pane, restore previous text in the pane
  1217.           poStatusBar->SetPaneText(m_nPane, m_oStrPrevText);
  1218.         }else{}
  1219. // D..... Display the changes
  1220.         poStatusBar->InvalidateRect(NULL);
  1221.       }else{}
  1222. #ifdef dCSP_DIALOG_PROGRESS
  1223.     }
  1224.     else
  1225.     {
  1226.       if(m_poWndMessage != NULL)
  1227.       {
  1228. // E..... Set previous message
  1229.         m_poWndMessage->SetWindowText(m_oStrPrevText); // Set the previous pane's text
  1230.       }else{}
  1231.       m_poWndProgress->InvalidateRect(NULL);
  1232.     } // NOTHING TO RESET IN DIALOG MODE !!!
  1233. #endif // dCSP_DIALOG_PROGRESS
  1234.   }else{}
  1235. }
  1236. // *** SYSTEM INTERFACE ***
  1237. /*--- START FUNCTION HEADER --------------------------------------------------*/
  1238. /* Name          : GetStatusBar                                               */
  1239. /* Role          : Get status bar's window handle                             */
  1240. /* Type          : PROTECTED                                                  */
  1241. /* Interface     : RETURN (direct value)                                      */
  1242. /*                   CStatusBar* : Window handle, else NULL if no status bar  */
  1243. /*                 OUTPUT (pointer to value)                                  */
  1244. /*                   None                                                     */
  1245. /*                 INPUT  (pointer to value, direct/default value)            */
  1246. /*                   None                                                     */
  1247. /* Pre-condition : None                                                       */
  1248. /* Constraints   : None                                                       */
  1249. /* Behavior      : A - Get the main window handle                             */
  1250. /*                 B - Retrieve the status bar handle                         */
  1251. /*----------------------------------------------------------------------------*/
  1252. /* PROC GetStatusBar                                                          */
  1253. /*                                                                            */
  1254. /* A..... Get the main window handle                                          */
  1255. /* B..... Retrieve the status bar handle                                      */
  1256. /* [IF main window is based on CFrameWnd]                                     */
  1257. /* : BA.... Return status bar's handle from CFrameWnd main window type        */
  1258. /* :[ELSE]                                                                    */
  1259. /* : BB.... Return status bar's handle from other main window type            */
  1260. /* [ENDIF]                                                                    */
  1261. /*----------------------------------------------------------------------------*/
  1262. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  1263. CStatusBar* CSkinProgress::GetStatusBar
  1264. ( // Get the pointer on the current status bar
  1265. )
  1266. {
  1267.   CWnd* poMainWnd;
  1268.   CWnd* poMessageBar;
  1269.   // Init
  1270. // A..... Get the main window handle
  1271.   poMainWnd = AfxGetMainWnd();
  1272.   // Process + Return
  1273. // B..... Retrieve the status bar handle
  1274.   if(poMainWnd != NULL)
  1275.   {
  1276.     if(poMainWnd->IsKindOf(RUNTIME_CLASS(CFrameWnd)))
  1277.     { // If main window is a frame window, use normal methods
  1278.       poMessageBar = ((CFrameWnd*) poMainWnd)->GetMessageBar();
  1279.       
  1280. // BA.... Return status bar's handle from CFrameWnd main window type
  1281.       return DYNAMIC_DOWNCAST(CStatusBar, poMessageBar);
  1282.     }
  1283.     else
  1284.     { // otherwise traverse children to try and find the status bar
  1285. // BB.... Return status bar's handle from other main window type
  1286.       return DYNAMIC_DOWNCAST(CStatusBar, poMainWnd->GetDescendantWindow(AFX_IDW_STATUS_BAR));
  1287.     }
  1288.   }
  1289.   else
  1290.   {
  1291.     return NULL;
  1292.   }
  1293. }
  1294. /*--- START FUNCTION HEADER --------------------------------------------------*/
  1295. /* Name          : GetTargetRect                                              */
  1296. /* Role          : Get the target CRect of the progress bar                   */
  1297. /* Type          : PROTECTED                                                  */
  1298. /* Interface     : RETURN (direct value)                                      */
  1299. /*                   BOOL = false : Error in getting the target rect          */
  1300. /*                          true  : CRect returned is valid                   */
  1301. /*                 OUTPUT (pointer to value)                                  */
  1302. /*                   o_poProgressRect : Pointer on an existing CRect          */
  1303. /*                 INPUT  (pointer to value, direct/default value)            */
  1304. /*                   None                                                     */
  1305. /* Pre-condition : None                                                       */
  1306. /* Constraints   : None                                                       */
  1307. /* Behavior      : A - Get the progress bar's CWnd anchor rectangle           */
  1308. /*                 B - Get the status bar selected pane rectangle             */
  1309. /*----------------------------------------------------------------------------*/
  1310. /* PROC GetTargetRect                                                         */
  1311. /*                                                                            */
  1312. /* [IF there is a progress bar CWnd anchor specified]                         */
  1313. /* : A..... Get the progress bar's CWnd anchor rectangle                      */
  1314. /* [ELSE]                                                                     */
  1315. /* : B..... Get the status bar selected pane rectangle                        */
  1316. /* [ENDIF]                                                                    */
  1317. /*----------------------------------------------------------------------------*/
  1318. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  1319. BOOL CSkinProgress::GetTargetRect
  1320. ( // Get the target CRect for the [SetBitmap(...)]
  1321.   CRect* o_poProgressRect // Pointer on an existing CRect
  1322. )
  1323. {
  1324.   CStatusBar* poStatusBar;
  1325.   // Init
  1326.   // Process + Return
  1327. #ifdef dCSP_DIALOG_PROGRESS
  1328.   if(m_poWndProgress != NULL)
  1329.   { // If dialog mode
  1330. // A..... Get the progress bar's CWnd anchor rectangle
  1331.     m_poWndProgress->GetWindowRect(o_poProgressRect); // Return CWnd parent's screen absolute coordinates 
  1332.     m_poWndProgress->GetParent()->ScreenToClient(o_poProgressRect); // Transform into parent relative coordinates
  1333.     return true;
  1334.   }
  1335.   else
  1336.   {
  1337. #endif // dCSP_DIALOG_PROGRESS
  1338.     poStatusBar = GetStatusBar();
  1339.     if(poStatusBar != NULL)
  1340.     {
  1341. // B..... Get the status sar selected pane rectangle
  1342.       poStatusBar->GetItemRect(m_nPane, o_poProgressRect); // Already working in parent (the status bar) relative coordinates
  1343.       return true;
  1344.     }
  1345.     else
  1346.     {
  1347.       return false;
  1348.     }
  1349. #ifdef dCSP_DIALOG_PROGRESS
  1350.   }
  1351. #endif // dCSP_DIALOG_PROGRESS
  1352. }
  1353. // *** BITMAP PROCESS ***
  1354. /*--- START FUNCTION HEADER --------------------------------------------------*/
  1355. /* Name          : SetBitmap                                                  */
  1356. /* Role          : Create an image list for the progress bar painting         */
  1357. /* Type          : public                                                     */
  1358. /* Interface     : RETURN (direct value)                                      */
  1359. /*                   BOOL = false : Error in image list creation              */
  1360. /*                          true  : Image list created and ready to use       */
  1361. /*                 OUTPUT (pointer to value)                                  */
  1362. /*                   None                                                     */
  1363. /*                 INPUT  (pointer to value, direct/default value)            */
  1364. /*                   i_poCwnd   : CWnd anchor to get the bitmap size to use   */
  1365. /*                   i_poBitmap : Image to use, use default bitmap if NULL    */
  1366. /*                   i_bDisplay : Display the changes                         */
  1367. /* Pre-condition : None                                                       */
  1368. /* Constraints   : None                                                       */
  1369. /* Behavior      : A - Get the base bitmap for the image list creation        */
  1370. /*                 B - Create the stretched bitmap used for the image list    */
  1371. /*                 C - Create an image list compatible bitmap                 */
  1372. /*                 D - Create the image list                                  */
  1373. /*                 E - Display the new bitmap                                 */
  1374. /*----------------------------------------------------------------------------*/
  1375. /* PROC SetBitmap                                                             */
  1376. /*                                                                            */
  1377. /* A..... Get the base bitmap for the <m_oBarImgLst> image list creation      */
  1378. /*   AA.... Create the base and the device compatible bitmaps                 */
  1379. /*   AB.... Load the <i_poBitmap> base bitmap                                 */
  1380. /*   AC.... Convert the <m_poBaseBmp> base bitmap in a compatible format      */
  1381. /* B..... Create the stretched bitmap used for the image list creation        */
  1382. /*   BA.... Create the bitmap, and delete the previous one if there was one   */
  1383. /*   BB.... Create a bitmap with mixed dimensions from the base and the pane  */
  1384. /*   BC.... Set the copy parameters for the stretching                        */
  1385. /* C..... Modify the base bitmap to create an image list compatible bitmap    */
  1386. /* D..... Create the <m_oBarImgLst> image list                                */
  1387. /*   DA.... Get the stretched bitmap size                                     */
  1388. /*   DB.... Calculate the size of every element of the image list             */
  1389. /*   DC.... Delete the previous image list the create a new one from scratch  */
  1390. /*   DD.... Create the new image list in 32 bits for maximun throughput       */
  1391. /*   DE.... Add the stretched bitmap in the image list                        */
  1392. /* E..... Display the new bitmap                                              */
  1393. /*----------------------------------------------------------------------------*/
  1394. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  1395. BOOL CSkinProgress::SetBitmap
  1396. ( // Change of progress bar image
  1397.   CBitmap* i_poBitmap  // = NULL : Pointer to an existing bitmap
  1398. #ifndef dCSP_TIMED_REDRAW
  1399.  ,BOOL     i_bDisplay  // = true : Display the changes
  1400. #endif // dCSP_TIMED_REDRAW
  1401. )
  1402.   BITMAP      sBmpSrc;
  1403. #ifdef dCSP_VERTICAL_BAR
  1404.   CBitmap     oBmpVertical;
  1405. #endif // dCSP_VERTICAL_BAR
  1406.   CBitmap*    poOldBitmap;
  1407. #ifdef dCSP_VERTICAL_BAR
  1408.   CBitmap*    poOldVertical;
  1409. #endif // dCSP_VERTICAL_BAR
  1410.   CBitmap*    poOldStretch;
  1411.   CRect       oRectBar;
  1412.   CDC         oDcBitmap;
  1413. #ifdef dCSP_VERTICAL_BAR
  1414.   CDC         oDcVertical;
  1415. #endif // dCSP_VERTICAL_BAR
  1416.   CDC         oDcStretch;
  1417.   // Init
  1418.   m_oRectPaint.SetRect(0, 0, 0, 0); // Force redraw if the bitmap is changed while the SkinProgress object exist
  1419. #ifdef dCSP_VERTICAL_BAR
  1420.   poOldVertical = NULL; // AVOID /W4 -> BC.... *STUPID COMPILER*
  1421. #endif // dCSP_VERTICAL_BAR
  1422.   // Process
  1423.   if(GetTargetRect(&oRectBar))
  1424.   { // If the target rectangle is valid
  1425.     CClientDC oDC(this); // Get the current DC
  1426. // A..... Get the <i_poBitmap> base bitmap for the <m_oBarImgLst> image list creation
  1427. // AA.... Create the base and the device compatible bitmaps
  1428.     if(m_poBaseBmp != NULL)
  1429.     { // *IF* m_poBaseBmp already exist
  1430.       delete m_poBaseBmp;
  1431.     }else{}
  1432.     m_poBaseBmp = new CBitmap; // BEWARE : DON'T INITIALIZE IT YET !
  1433.     if(m_poCompatibleBmp != NULL)
  1434.     { // *IF* m_poCompatibleBmp already exist
  1435.       delete m_poCompatibleBmp;
  1436.     }else{}
  1437.     m_poCompatibleBmp = new CBitmap; // BEWARE : DON'T INITIALIZE IT YET !
  1438. // AB.... Load the <i_poBitmap> base bitmap
  1439.     // Check if i_poBitmap is valid, otherwise use the resource's bitmap
  1440.     if(i_poBitmap == NULL)
  1441.     { // If no bitmap provided, takes the default bitmap
  1442. #ifndef dCSP_RESOURCE_BITMAP
  1443.       m_poBaseBmp->CreateBitmapIndirect(&sAQUA_BITMAP);
  1444. #else
  1445.       m_poBaseBmp->LoadBitmap(IDB_AQUABAR); // Defaut bitmap, might have to be changed !
  1446. #endif // dCSP_RESOURCE_BITMAP
  1447.     }
  1448.     else
  1449.     { // Copy the <i_poBitmap> input bitmap as the new <m_poBaseBmp> base bitmap
  1450.       CopyBitmap(m_poBaseBmp, i_poBitmap);
  1451.     }
  1452. // AC.... Convert the <m_poBaseBmp> base bitmap in a device compatible format
  1453.     ConvBitmap(m_poCompatibleBmp, m_poBaseBmp, &oDC);
  1454.     // Get bitmap width and height for the image list creation
  1455.     m_poCompatibleBmp->GetBitmap(&sBmpSrc);
  1456.     m_nBmpWidth  = sBmpSrc.bmWidth / cSPB_EnumElements; // cSPB_EnumElements == 9, the bitmap is actually composed of 9 parts
  1457.     m_nBmpHeight = sBmpSrc.bmHeight;
  1458. // B..... Create the <m_poStretchBmp> stretched bitmap used for the <m_oBarImgLst> image list creation
  1459. // BA.... Create the bitmap, and if a previous one was already existing, delete it first
  1460.     if(m_poStretchBmp != NULL)
  1461.     { // *IF* m_poStretchBmp already exist
  1462.       delete m_poStretchBmp;
  1463.     }else{}
  1464.     m_poStretchBmp = new CBitmap;
  1465. // BB.... Create a bitmap with the base bitmap width, and the despination pane height minus 2
  1466. #ifdef dCSP_VERTICAL_BAR
  1467.     if(m_bVertical == false)
  1468.     { // Horizontal bar
  1469. #endif // dCSP_VERTICAL_BAR
  1470. #ifndef dCSP_CREATE_BITMAP_FILE
  1471.       m_poStretchBmp->CreateCompatibleBitmap(&oDC, sBmpSrc.bmWidth, oRectBar.Height() - 2); // Minus 2, with don't count the contour of the box
  1472. #else
  1473.       m_poStretchBmp->CreateCompatibleBitmap(&oDC, sBmpSrc.bmWidth, sBmpSrc.bmHeight); // BITMAP CREATION IN CURRENT VIDEO MODE !
  1474. #endif //dCSP_CREATE_BITMAP_FILE
  1475. #ifdef dCSP_VERTICAL_BAR
  1476.     }
  1477.     else
  1478.     { // Vertical bar
  1479. #ifndef dCSP_DISPLAY_STRETCH
  1480.       oBmpVertical.CreateCompatibleBitmap(&oDC, sBmpSrc.bmWidth, oRectBar.Width() - 2); // Minus 2, with don't count the contour of the box
  1481.       m_poStretchBmp->CreateCompatibleBitmap(&oDC, (oRectBar.Width() - 2) * cSPB_EnumElements, m_nBmpWidth); // Minus 2, with don't count the contour of the box
  1482. #else
  1483.       oBmpVertical.CreateCompatibleBitmap(&oDC, sBmpSrc.bmWidth, oRectBar.Height() - 2); // Minus 2, with don't count the contour of the box
  1484.       m_poStretchBmp->CreateCompatibleBitmap(&oDC, (oRectBar.Height() - 2) * cSPB_EnumElements, m_nBmpWidth); // Minus 2, with don't count the contour of the box
  1485. #endif //dCSP_DISPLAY_STRETCH
  1486.     }
  1487. #endif // dCSP_VERTICAL_BAR
  1488.    
  1489. // BC.... Set the copy parameters for the stretching
  1490.     // Set the DC
  1491.     oDcBitmap.CreateCompatibleDC(&oDC);
  1492.   poOldBitmap  = oDcBitmap.SelectObject(m_poCompatibleBmp); // Source
  1493.     oDcStretch.CreateCompatibleDC(&oDC);
  1494.   poOldStretch = oDcStretch.SelectObject(m_poStretchBmp); // Destination
  1495. #ifdef dCSP_VERTICAL_BAR
  1496.     if(m_bVertical != false)
  1497.     { // Vertical bar
  1498.       oDcVertical.CreateCompatibleDC(&oDC);
  1499.     poOldVertical = oDcVertical.SelectObject(&oBmpVertical); // Destination
  1500.       oDcVertical.SetStretchBltMode(HALFTONE);
  1501.     }
  1502.     else
  1503.     { // Horizontal bar
  1504. #endif // dCSP_VERTICAL_BAR
  1505.       oDcStretch.SetStretchBltMode(HALFTONE);
  1506. #ifdef dCSP_VERTICAL_BAR
  1507.     }
  1508. #endif // dCSP_VERTICAL_BAR
  1509. // C..... Copy the <m_poCompatibleBmp> base bitmap and apply modifications to create an image list compatible bitmap
  1510.     // Copy the picture
  1511. #ifdef dCSP_VERTICAL_BAR
  1512.     if(m_bVertical == false)
  1513.     { // Horizontal bar
  1514. #endif // dCSP_VERTICAL_BAR
  1515. #ifndef dCSP_CREATE_BITMAP_FILE
  1516.       oDcStretch.StretchBlt(0, 0, sBmpSrc.bmWidth, oRectBar.Height() - 2, &oDcBitmap, 0, 0, sBmpSrc.bmWidth, sBmpSrc.bmHeight, SRCCOPY);
  1517. #else
  1518.       oDcStretch.BitBlt(0, 0, sBmpSrc.bmWidth, sBmpSrc.bmHeight, &oDcBitmap, 0, 0, SRCCOPY); // BITMAP CREATION IN CURRENT VIDEO MODE, PLEASE USE 32 BITS, AVOID MAPPED !
  1519. #endif //dCSP_CREATE_BITMAP_FILE
  1520. #ifdef dCSP_VERTICAL_BAR
  1521.     }
  1522.     else
  1523.     { // Vertical bar
  1524. #ifndef dCSP_DISPLAY_STRETCH
  1525.       oDcVertical.StretchBlt(0, 0, sBmpSrc.bmWidth, oRectBar.Width()  - 2, &oDcBitmap, 0, 0, sBmpSrc.bmWidth, sBmpSrc.bmHeight, SRCCOPY);
  1526. #else
  1527.       oDcVertical.StretchBlt(0, 0, sBmpSrc.bmWidth, oRectBar.Height() - 2, &oDcBitmap, 0, 0, sBmpSrc.bmWidth, sBmpSrc.bmHeight, SRCCOPY);
  1528. #endif // dCSP_DISPLAY_STRETCH
  1529.       // Copy the stretched vertical picture into the m_poStretchBmp with part flip
  1530. #ifndef dCSP_DISPLAY_STRETCH
  1531.       for(int y = 0; y < oRectBar.Width() - 2; y += 1)
  1532. #else
  1533.       for(int y = 0; y < oRectBar.Height() - 2; y += 1)
  1534. #endif // dCSP_DISPLAY_STRETCH
  1535.       { // Scan each line
  1536.         for(int x = 0; x < sBmpSrc.bmWidth; x += 1)
  1537.         { // Scan every pixel of the line
  1538. #ifndef dCSP_DISPLAY_STRETCH
  1539.           oDcStretch.SetPixel(y + ((oRectBar.Width()  - 2) * (x / m_nBmpWidth)), x % m_nBmpWidth, oDcVertical.GetPixel(x, y));
  1540. #else
  1541.           oDcStretch.SetPixel(y + ((oRectBar.Height() - 2) * (x / m_nBmpWidth)), x % m_nBmpWidth, oDcVertical.GetPixel(x, y));
  1542. #endif // dCSP_DISPLAY_STRETCH
  1543.         }
  1544.       }
  1545.     }
  1546. #endif // dCSP_VERTICAL_BAR
  1547.     // Release the DC
  1548. #ifdef dCSP_VERTICAL_BAR
  1549.     if(m_bVertical != false)
  1550.     { // Vertical bar
  1551.     oDcVertical.SelectObject(poOldVertical);
  1552.       oDcVertical.DeleteDC();
  1553.     }else{}
  1554. #endif // dCSP_VERTICAL_BAR
  1555.     oDcStretch.SelectObject(poOldStretch);
  1556.     oDcStretch.DeleteDC();
  1557.     oDcBitmap.SelectObject(poOldBitmap);
  1558.     oDcBitmap.DeleteDC();
  1559. // D..... Create the <m_oBarImgLst> image list
  1560. // DA.... Get the stretched bitmap size
  1561.     // Get bitmap width and height for the image list creation
  1562.     m_poStretchBmp->GetBitmap(&sBmpSrc);
  1563. #ifdef dCSP_CREATE_BITMAP_FILE
  1564.     // Fast and dirty routine to save the stretched bitmap in C format, for the people who wants to recreate the AQUA_BITMAP array with their own default bitmap, instead to provide it to the constructor
  1565.     FILE*          sFileHandle;
  1566.     unsigned char* panDataBmp;
  1567.     int            nCount = sBmpSrc.bmWidthBytes * sBmpSrc.bmHeight;
  1568.     unsigned char  nBufferHi;
  1569.     unsigned char  nBufferLo;
  1570.     panDataBmp = new unsigned char[nCount];
  1571.     if(panDataBmp != NULL)
  1572.     {
  1573.       sFileHandle = fopen("C:\aqua_bitmap.cpp", "wt"); // Change the path here
  1574.       if(sFileHandle != NULL)
  1575.       {
  1576.         m_poStretchBmp->GetBitmapBits(nCount, panDataBmp);
  1577.         fprintf(sFileHandle, "unsigned char anAQUA_BITMAP[%d] =n{n ", nCount);
  1578.         for(int nPointer = 0; nPointer < nCount; nPointer += 1)
  1579.         {
  1580.           fputs(" 0x", sFileHandle);
  1581.           nBufferHi = panDataBmp[nPointer];
  1582.           nBufferLo = nBufferHi;
  1583.           nBufferHi >>= 4;
  1584.           nBufferLo  &= 0x0F;
  1585.           if(nBufferHi < 10)
  1586.           {
  1587.             nBufferHi += '0';
  1588.           }
  1589.           else
  1590.           {
  1591.             nBufferHi += 'A' - 10;
  1592.           }
  1593.           if(nBufferLo < 10)
  1594.           {
  1595.             nBufferLo += '0';
  1596.           }
  1597.           else
  1598.           {
  1599.             nBufferLo += 'A' - 10;
  1600.           }
  1601.           fputc(nBufferHi, sFileHandle);
  1602.           fputc(nBufferLo, sFileHandle);
  1603.           fputs(",", sFileHandle);
  1604.           if((nPointer % 16) == 15)
  1605.           { // 16 pixels per line
  1606.             fputs("n ", sFileHandle);
  1607.           }else{}
  1608.         }
  1609.         fputs("};nn", sFileHandle);
  1610.         fputs("BITMAP sAQUA_BITMAP =n{n", sFileHandle);
  1611.           fprintf(sFileHandle, "  %d,   // bmTypen",     sBmpSrc.bmType);
  1612.           fprintf(sFileHandle, "  %d,  // bmWidthn",     sBmpSrc.bmWidth);
  1613.           fprintf(sFileHandle, "  %d,  // bmHeightn",    sBmpSrc.bmHeight);
  1614.           fprintf(sFileHandle, "  %d, // bmWidthBytesn", sBmpSrc.bmWidthBytes);
  1615.           fprintf(sFileHandle, "  %d,   // bmPlanesn",   sBmpSrc.bmPlanes);
  1616.           fprintf(sFileHandle, "  %d,  // bmBitsPixeln", sBmpSrc.bmBitsPixel);
  1617.           fputs("  anAQUA_BITMAP // bmBitsn", sFileHandle);
  1618.         fputs("};n", sFileHandle);
  1619.         fclose(sFileHandle);
  1620.       }else{}
  1621.       delete panDataBmp;
  1622.     }else{}
  1623. #endif //dCSP_CREATE_BITMAP_FILE
  1624. // DB.... Calculate the size of every element of the image list
  1625.     m_nBmpWidth  = sBmpSrc.bmWidth / cSPB_EnumElements; // cSPB_EnumElements == 5, the bitmap is yet composed of 5 parts
  1626.     m_nBmpHeight = sBmpSrc.bmHeight;
  1627. // DC.... Delete the previous image list the create a new one from scratch (useful when providing a new bitmap during SkinProgress life-time)
  1628.     // Image list creation
  1629.     m_oBarImgLst.DeleteImageList(); // Delete the previous ImageList and recreate it with the new bitmap
  1630. // DD.... Create the new image list in 32 bits to be sure it will accept any kind of bitmap in input (if 8 bits bitmap provided, will be converted in 32 bits)
  1631.     if(!m_oBarImgLst.Create(m_nBmpWidth, m_nBmpHeight, ILC_COLOR32, 0, 0)) // ILC_COLOR32 to be sure to accept any BitMap format passed through i_poBitmap
  1632.     {
  1633.       return false;
  1634.     }
  1635.     else
  1636.     {
  1637. // DE.... Add the stretched bitmap in the image list
  1638.       m_oBarImgLst.Add(m_poStretchBmp, RGB(0, 255, 255));
  1639. // E..... Display the new bitmap
  1640. #ifndef dCSP_TIMED_REDRAW
  1641.       if(i_bDisplay != false)
  1642.       {
  1643.         RefreshPanes();
  1644.       }else{}
  1645. #endif // dCSP_TIMED_REDRAW
  1646.       return true;
  1647.     }
  1648.   }
  1649.   else
  1650.   {
  1651.     return false;
  1652.   }
  1653. }
  1654. /*--- START FUNCTION HEADER --------------------------------------------------*/
  1655. /* Name          : CopyBitmap                                                 */
  1656. /* Role          : Copy a bitmap                                              */
  1657. /* Type          : public                                                     */
  1658. /* Interface     : RETURN (direct value)                                      */
  1659. /*                   BOOL = false : Error in copy                             */
  1660. /*                          true  : Image copied                              */
  1661. /*                 OUTPUT (pointer to value)                                  */
  1662. /*                   o_poBitmap    : Image where to copy                      */
  1663. /*                 INPUT  (pointer to value, direct/default value)            */
  1664. /*                   i_poBitmap    : Image to copy                            */
  1665. /* Pre-condition : Both output and input pointer must be provided !           */
  1666. /*                 Also, the output bitmap MUST BE CREATED, BUT NOT           */
  1667. /*                 INITIALIZED                                                */
  1668. /* Constraints   : Do not handle mapped bitmap yet...                         */
  1669. /* Behavior      : A - Create a remote data buffer to get the source data     */
  1670. /*                 B - Get the source data                                    */
  1671. /*                 C - Copy the bitmap                                        */
  1672. /*----------------------------------------------------------------------------*/
  1673. /* PROC CopyBitmap                                                            */
  1674. /*                                                                            */
  1675. /* A..... Create a remote data buffer to get the source data                  */
  1676. /* [IF the remote buffer is successfully created]                             */
  1677. /* : B..... Get the source data                                               */
  1678. /* : C..... Copy the bitmap                                                   */
  1679. /* [ENDIF]                                                                    */
  1680. /*----------------------------------------------------------------------------*/
  1681. /* As this STUPID [CBitmap::GetBitmap((BITMAP*) o_psBitmap)] returns NULL in  */
  1682. /* <o_psBitmap.bmBits>, we cannot reuse immediatly the returned BITMAP for a  */
  1683. /* [CBitmap::CreateBitmapIndirect((BITMAP*) i_psBitmap)], we have to get the  */
  1684. /* address of the data buffer by creating it by ourself, then get the datas   */
  1685. /* with [CBitmap::GetBitmapBits((DWORD) i_nDataCount, (LPVOID) i_panDataBmp)] */
  1686. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  1687. BOOL CSkinProgress::CopyBitmap
  1688. ( // Copy a bitmap
  1689.   CBitmap* o_poBitmap, // Pointer to an EXISTING but NOT INITIALIZED bitmap
  1690.   CBitmap* i_poBitmap  // Pointer to the source bitmap
  1691. )
  1692.   BITMAP         sBmpSrc;
  1693.   unsigned char* panDataBmp;
  1694.   DWORD          nDataCount;
  1695.   BOOL           bResult;
  1696.   // Init
  1697.   // Process
  1698.   if(
  1699.          (o_poBitmap == NULL)
  1700.       || (i_poBitmap == NULL)
  1701.     )
  1702.   {
  1703.     return false;
  1704.   }
  1705.   else
  1706.   {
  1707. // A..... Create a remote data buffer to get the source data
  1708.     i_poBitmap->GetBitmap(&sBmpSrc);
  1709.     nDataCount = sBmpSrc.bmWidthBytes * sBmpSrc.bmHeight;
  1710.     panDataBmp = new unsigned char[nDataCount];
  1711.     if(panDataBmp != NULL)
  1712.     {
  1713. // B..... Get the source data
  1714.       i_poBitmap->GetBitmapBits(nDataCount, panDataBmp);
  1715.       sBmpSrc.bmBits = panDataBmp; // Just complete the BITMAP structure
  1716. // C..... Copy the bitmap
  1717.       bResult = o_poBitmap->CreateBitmapIndirect(&sBmpSrc);
  1718.       delete[] panDataBmp;
  1719.       return bResult;
  1720.     }
  1721.     else
  1722.     {
  1723.       return false;
  1724.     }
  1725.   }
  1726. }
  1727. /*--- START FUNCTION HEADER --------------------------------------------------*/
  1728. /* Name          : ConvBitmap                                                 */
  1729. /* Role          : Convert a bitmap to a specified device context             */
  1730. /* Type          : public                                                     */
  1731. /* Interface     : RETURN (direct value)                                      */
  1732. /*                   BOOL = false : Error in conversion                       */
  1733. /*                          true  : Image converted                           */
  1734. /*                 OUTPUT (pointer to value)                                  */
  1735. /*                   o_poBitmap    : Image where to copy/transform            */
  1736. /*                 INPUT  (pointer to value, direct/default value)            */
  1737. /*                   i_poBitmap    : Image to copy/transform                  */
  1738. /*                   i_poDC        : The DC to use for the conversion         */
  1739. /* Pre-condition : Both output and input pointer must be provided !           */
  1740. /*                 Also, the output bitmap MUST BE CREATED, BUT NOT           */
  1741. /*                 INITIALIZED                                                */
  1742. /* Constraints   : Do not handle mapped bitmap yet...                         */
  1743. /* Behavior      : A - Get the current DC                                     */
  1744. /*                 B - Copy the bitmap                                        */
  1745. /*                 C - Create a remote data buffer to get the source data     */
  1746. /*                 D - Get the source data                                    */
  1747. /*                 E - Initialize the bitmap                                  */
  1748. /*                 F - Convert the data                                       */
  1749. /*                 G - Copy the converted bitmap                              */
  1750. /*----------------------------------------------------------------------------*/
  1751. /* PROC CopyBitmap                                                            */
  1752. /*                                                                            */
  1753. /* [IF pointers on bitmap valids]                                             */
  1754. /* : [IF no DC provided]                                                      */
  1755. /* : : A..... Get the current DC                                              */
  1756. /* : [ELSE]                                                                   */
  1757. /* : [IF same color format]                                                   */
  1758. /* : : B..... Copy the bitmap                                                 */
  1759. /* : [ELSE]                                                                   */
  1760. /* : : C..... Create a remote data buffer to get the source data              */
  1761. /* : : [IF buffer created]                                                    */
  1762. /* : : : D..... Get the source data                                           */
  1763. /* : : : E..... Initialize the bitmap                                         */
  1764. /* : : : F..... Convert the data                                              */
  1765. /* : : : G..... Copy the converted bitmap                                     */
  1766. /* : : [ELSE]                                                                 */
  1767. /* : [ENDIF]                                                                  */
  1768. /* [ENDIF]                                                                    */
  1769. /*----------------------------------------------------------------------------*/
  1770. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  1771. BOOL CSkinProgress::ConvBitmap
  1772. ( // Convert a bitmap to a specified device context
  1773.   CBitmap*    o_poBitmap, // Pointer to an EXISTING but NOT INITIALIZED bitmap
  1774.   CBitmap*    i_poBitmap, // Pointer to the source bitmap
  1775.   CDC*        i_poDC      // = NULL : Pointer to the DC to use for the conversion, if NULL use the current DC
  1776. )
  1777.   BITMAP         sBmpSrc;
  1778.   BITMAPINFO     sBmpInfoSrc;
  1779.   HBITMAP        DIB;
  1780.   unsigned char* panDataBmp;
  1781.   DWORD          nDataCount;
  1782.   int            nResult;
  1783.   // Init
  1784.   panDataBmp = NULL;
  1785.   // Process
  1786.   if(
  1787.          (o_poBitmap != NULL)
  1788.       && (i_poBitmap != NULL)
  1789.     )
  1790.   {
  1791.     if(i_poDC == NULL)
  1792.     { // If no target device context provided, use the current one
  1793. // A..... Get the current DC
  1794.       CClientDC oDC(this);
  1795.       i_poDC = &oDC;
  1796.     }else{}
  1797.     i_poBitmap->GetBitmap(&sBmpSrc); // Get some infos on the source bitmap
  1798.     if(sBmpSrc.bmBitsPixel == GetDeviceCaps(*i_poDC, BITSPIXEL))
  1799.     { // If it's the same bitmap format, just copy it instead to waste some time to convert the picture (what will fail :/ )
  1800. // B..... Copy the bitmap
  1801.       nResult = (int) CopyBitmap(o_poBitmap, i_poBitmap);
  1802.     }
  1803.     else
  1804.     {
  1805. // C..... Create a remote data buffer to get the source data
  1806.       nDataCount = sBmpSrc.bmWidthBytes * sBmpSrc.bmHeight;
  1807.       panDataBmp = new unsigned char[nDataCount];
  1808.       if(panDataBmp != NULL)
  1809.       {
  1810. // D..... Get the source data
  1811.         i_poBitmap->GetBitmapBits(nDataCount, panDataBmp);
  1812.         sBmpSrc.bmBits = panDataBmp;
  1813. // E..... Initialize the bitmap
  1814.         sBmpInfoSrc.bmiColors[0].rgbBlue      = 0;
  1815.         sBmpInfoSrc.bmiColors[0].rgbGreen     = 0;
  1816.         sBmpInfoSrc.bmiColors[0].rgbRed       = 0;
  1817.         sBmpInfoSrc.bmiColors[0].rgbReserved  = 0;
  1818.         sBmpInfoSrc.bmiHeader.biSize          = sizeof(BITMAPINFOHEADER);
  1819.         sBmpInfoSrc.bmiHeader.biWidth         = sBmpSrc.bmWidth;
  1820.         sBmpInfoSrc.bmiHeader.biHeight        = 0 - sBmpSrc.bmHeight; // 0 - HEIGHT : TOP-DOWN DIB, origin is upper/left corner
  1821.         sBmpInfoSrc.bmiHeader.biPlanes        = sBmpSrc.bmPlanes;
  1822.         sBmpInfoSrc.bmiHeader.biBitCount      = sBmpSrc.bmBitsPixel;
  1823.         sBmpInfoSrc.bmiHeader.biCompression   = BI_RGB;
  1824.         sBmpInfoSrc.bmiHeader.biSizeImage     = 0; // 0 : BI_RGB
  1825.         sBmpInfoSrc.bmiHeader.biXPelsPerMeter = 0;
  1826.         sBmpInfoSrc.bmiHeader.biYPelsPerMeter = 0;
  1827.         sBmpInfoSrc.bmiHeader.biClrUsed       = 0;
  1828.         sBmpInfoSrc.bmiHeader.biClrImportant  = 0;
  1829. // F..... Convert the data
  1830.         DIB = CreateDIBitmap
  1831.         (
  1832.           i_poDC->m_hDC,
  1833.           &sBmpInfoSrc.bmiHeader,
  1834.           CBM_INIT,
  1835.           panDataBmp,
  1836.           &sBmpInfoSrc,
  1837.           DIB_RGB_COLORS
  1838.         );
  1839. // G..... Copy the converted bitmap
  1840.         nResult = (int) CopyBitmap(o_poBitmap, CBitmap::FromHandle(DIB));
  1841.         DeleteObject(DIB);
  1842.         delete[] panDataBmp;
  1843.         if(nResult != 0)
  1844.         {
  1845.           return true;
  1846.         }else{}
  1847.       }else{}
  1848.     }
  1849.   }else{}
  1850.   return false;
  1851. }
  1852. // *** PROGRESS INTERFACE ***
  1853. /*--- START FUNCTION HEADER --------------------------------------------------*/
  1854. /* Name          : SetRange                                                   */
  1855. /* Role          : None                                                       */
  1856. /* Type          : public                                                     */
  1857. /* Interface     : RETURN (direct value)                                      */
  1858. /*                   BOOL = false : Error while trying to change the range    */
  1859. /*                          true  : New range set                             */
  1860. /*                 OUTPUT (pointer to value)                                  */
  1861. /*                   None                                                     */
  1862. /*                 INPUT  (pointer to value, direct/default value)            */
  1863. /*                   i_nLower    : Minimum value possible                     */
  1864. /*                   i_nUpper    : Maximum value possible                     */
  1865. /*                   i_nStep     : Step increment                             */
  1866. /*                   i_bResamble : Resample the current position              */
  1867. /*                   i_bDisplay  : Display the changes                        */
  1868. /* Pre-condition : None                                                       */
  1869. /* Constraints   : None                                                       */
  1870. /* Behavior      : A - Resample the postion                                   */
  1871. /*                 B - Set the new range                                      */
  1872. /*                 C - Display the new ranged progress bar                    */
  1873. /*----------------------------------------------------------------------------*/
  1874. /* PROC SetRange                                                              */
  1875. /*                                                                            */
  1876. /* A..... Resample the postion from the previous range to the new one         */
  1877. /* B..... Set the new range values                                            */
  1878. /* C..... Display the new ranged progress bar                                 */
  1879. /*----------------------------------------------------------------------------*/
  1880. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  1881. BOOL CSkinProgress::SetRange
  1882. ( // Set the new range
  1883.   int  i_nLower,    // Minimum limit
  1884.   int  i_nUpper,    // Maximum limit
  1885.   int  i_nStep,     // = 1     : Step increment
  1886.   BOOL i_bResamble  // = false : Resample the current position from the new Lower and Upper values
  1887. #ifndef dCSP_TIMED_REDRAW
  1888.  ,BOOL i_bDisplay   // = true  : Display the changes
  1889. #endif // dCSP_TIMED_REDRAW
  1890. )
  1891. {
  1892.   // Init
  1893.   // Process + Return
  1894.   if(IsWindow(GetSafeHwnd()))
  1895.   {
  1896.     ASSERT((-0x7FFFFFFF <= i_nLower) && (i_nLower <= 0x7FFFFFFF));
  1897.     ASSERT((-0x7FFFFFFF <= i_nUpper) && (i_nUpper <= 0x7FFFFFFF));
  1898.     ASSERT(i_nLower < i_nUpper); // Seems to be stupid, but avoid zero divide problem in percent calculation just below
  1899. // A..... Resample the postion from the previous range to the new one
  1900.     if(i_bResamble != false)
  1901.     { // Resample positions to readapt them to the new range
  1902. #ifdef dCSP_SLIDERBAR_METHOD
  1903.       // Recalculate start
  1904.       m_nLeft  = (int) (
  1905.                            (
  1906.                                ( 
  1907.                                    (LONGLONG) // Turns the whole calculation in 64 bits
  1908.                                    (m_nLeft  - m_nLower) // Old start
  1909.                                  * (i_nUpper - i_nLower) // New range
  1910.                                )
  1911.                              / (m_nUpper - m_nLower)     // Old range
  1912.                            )
  1913.                          + i_nLower                      // New start
  1914.                        );
  1915.       m_nPrevLeft  = m_nLeft;
  1916. #endif // dCSP_SLIDERBAR_METHOD
  1917.       // Recalculate end
  1918.       m_nRight = (int) (
  1919.                            (
  1920.                                ( 
  1921.                                    (LONGLONG) // Turns the whole calculation in 64 bits
  1922.                                    (m_nRight - m_nLower) // Old end
  1923.                                  * (i_nUpper - i_nLower) // New range
  1924.                                )
  1925.                              / (m_nUpper - m_nLower)     // Old range
  1926.                            )
  1927.                          + i_nLower                      // New end 
  1928.                        );
  1929.       m_nPrevRight = m_nRight;
  1930.     }else{}
  1931. // B..... Set the new range values
  1932.     // Sets new parameters for good
  1933.     m_nLower = i_nLower;
  1934.     m_nUpper = i_nUpper;
  1935.     m_nStep  = i_nStep;
  1936. // C..... Display the new ranged progress bar
  1937. #ifndef dCSP_TIMED_REDRAW
  1938.     if(i_bDisplay != false)
  1939.     {
  1940.       RefreshPanes();
  1941.     }else{}
  1942. #endif // dCSP_TIMED_REDRAW
  1943.     return true;
  1944.   }
  1945.   else
  1946.   {
  1947.     return false;
  1948.   }
  1949. }
  1950. /*--- START FUNCTION HEADER --------------------------------------------------*/
  1951. /* Name          : SetPos                                                     */
  1952. /* Role          : None                                                       */
  1953. /* Type          : public                                                     */
  1954. /* Interface     : RETURN (direct value)                                      */
  1955. /*                   int : Previous <m_nRight> position, 0 if error           */
  1956. /*                 OUTPUT (pointer to value)                                  */
  1957. /*                   None                                                     */
  1958. /*                 INPUT  (pointer to value, direct/default value)            */
  1959. /*                   i_nPos     : Select the new position                     */
  1960. /*                   i_bDisplay : Display the changes                         */
  1961. /* Pre-condition : None                                                       */
  1962. /* Constraints   : None                                                       */
  1963. /* Behavior      : A - Jump to a specified position                           */
  1964. /*                 B - Display the changes                                    */
  1965. /*                 C - Return the previous position                           */
  1966. /*----------------------------------------------------------------------------*/
  1967. /* PROC SetPos                                                                */
  1968. /*                                                                            */
  1969. /* A..... Jump to a specified <i_nEnd> position                               */
  1970. /* B..... Display the changes                                                 */
  1971. /* C..... Return the previous <m_nRight> position                             */
  1972. /*----------------------------------------------------------------------------*/
  1973. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  1974. int CSkinProgress::SetPos
  1975. ( // Set <m_nRight> value
  1976.   int  i_nPos     // Set a new current position
  1977. #ifndef dCSP_TIMED_REDRAW
  1978.  ,BOOL i_bDisplay // = true : Display the changes
  1979. #endif // dCSP_TIMED_REDRAW
  1980. )
  1981. {
  1982.   // Init
  1983.   // Process + Return
  1984.   if(IsWindow(GetSafeHwnd()))
  1985.   {
  1986.     ASSERT((-0x7FFFFFFF <= i_nPos) && (i_nPos <= 0x7FFFFFFF));
  1987.     if(i_nPos > m_nUpper)
  1988.     { // Avoid problems
  1989.       i_nPos = m_nUpper;
  1990.     }else{}
  1991.     if(i_nPos < m_nLower)
  1992.     { // Avoid problems
  1993.       i_nPos = m_nLower;
  1994.     }else{}
  1995. #ifdef dCSP_SLIDERBAR_METHOD
  1996.     if(i_nPos < m_nLeft)
  1997.     { // Avoid problems
  1998.       i_nPos = m_nLeft;
  1999.     }else{}
  2000. #endif // dCSP_SLIDERBAR_METHOD
  2001.     m_nPrevRight = m_nRight;
  2002. // A..... Jump to a specified <i_nEnd> position
  2003.     m_nRight     = i_nPos;
  2004. // B..... Display the changes
  2005. #ifndef dCSP_TIMED_REDRAW
  2006.     if(i_bDisplay != false)
  2007.     {
  2008.       RefreshPanes();
  2009.     }else{}
  2010. #endif // dCSP_TIMED_REDRAW
  2011. // C..... Return the previous <m_nRight> position
  2012.     return m_nPrevRight;
  2013.   }
  2014.   else
  2015.   {
  2016.     return 0;
  2017.   }
  2018. }
  2019. /*--- START FUNCTION HEADER --------------------------------------------------*/
  2020. /* Name          : OffsetPos                                                  */
  2021. /* Role          : None                                                       */
  2022. /* Type          : public                                                     */
  2023. /* Interface     : RETURN (direct value)                                      */
  2024. /*                   int : Previous <m_nRight> position, 0 if error           */
  2025. /*                 OUTPUT (pointer to value)                                  */
  2026. /*                   None                                                     */
  2027. /*                 INPUT  (pointer to value, direct/default value)            */
  2028. /*                   i_nOffset  : Offset the current position                 */
  2029. /*                   i_bDisplay : Display the changes                         */
  2030. /* Pre-condition : None                                                       */
  2031. /* Constraints   : None                                                       */
  2032. /* Behavior      : A - Add an offset to the current position                  */
  2033. /*                 B - Display the changes                                    */
  2034. /*                 C - Return the previous position                           */
  2035. /*----------------------------------------------------------------------------*/
  2036. /* PROC OffsetPos                                                             */
  2037. /*                                                                            */
  2038. /* A..... Add a <i_nEnd> offset to the current <m_nRight> position            */
  2039. /* B..... Display the changes                                                 */
  2040. /* C..... Return the previous <m_nRight> position                             */
  2041. /*----------------------------------------------------------------------------*/
  2042. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  2043. int CSkinProgress::OffsetPos
  2044. ( // Forward of <i_nOffset> value
  2045.   int  i_nOffset  // Add the offset to the current position (can be negative)
  2046. #ifndef dCSP_TIMED_REDRAW
  2047.  ,BOOL i_bDisplay // = true : Display the changes
  2048. #endif // dCSP_TIMED_REDRAW
  2049. )
  2050.   // Init
  2051.   // Process + Return
  2052.   if(IsWindow(GetSafeHwnd()))
  2053.   {
  2054.     m_nPrevRight  = m_nRight;
  2055. // A..... Add a <i_nEnd> offset to the current <m_nRight> position
  2056.     m_nRight     += i_nOffset;
  2057.     if(m_nRight > m_nUpper)
  2058.     { // Avoid problems
  2059.       m_nRight = m_nUpper;
  2060.     }else{}
  2061.     if(m_nRight < m_nLower)
  2062.     { // Avoid problems
  2063.       m_nRight = m_nLower;
  2064.     }else{}
  2065. #ifdef dCSP_SLIDERBAR_METHOD
  2066.     if(m_nRight < m_nLeft)
  2067.     { // Avoid problems
  2068.       m_nRight = m_nLeft;
  2069.     }else{}
  2070. #endif // dCSP_SLIDERBAR_METHOD
  2071. // B..... Display the changes
  2072. #ifndef dCSP_TIMED_REDRAW
  2073.     if(i_bDisplay != false)
  2074.     {
  2075.       RefreshPanes();
  2076.     }else{}
  2077. #endif // dCSP_TIMED_REDRAW
  2078. // C..... Return the previous <m_nRight> position
  2079.     return m_nPrevRight;
  2080.   }
  2081.   else
  2082.   {
  2083.     return 0;
  2084.   }
  2085. }
  2086. /*--- START FUNCTION HEADER --------------------------------------------------*/
  2087. /* Name          : SetStep                                                    */
  2088. /* Role          : None                                                       */
  2089. /* Type          : public                                                     */
  2090. /* Interface     : RETURN (direct value)                                      */
  2091. /*                   int : Previous <m_nStep> setting, 0 if error             */
  2092. /*                 OUTPUT (pointer to value)                                  */
  2093. /*                   None                                                     */
  2094. /*                 INPUT  (pointer to value, direct/default value)            */
  2095. /*                   i_nStep : Set the new step increment                     */
  2096. /* Pre-condition : None                                                       */
  2097. /* Constraints   : None                                                       */
  2098. /* Behavior      : A - Set the step increment value                           */
  2099. /*                 B - Return the previous step increment value               */
  2100. /*----------------------------------------------------------------------------*/
  2101. /* PROC SetStep                                                               */
  2102. /*                                                                            */
  2103. /* A..... Set the <m_nStep> step increment value                              */
  2104. /* C..... Return the previous <m_nStep> step increment value                  */
  2105. /*----------------------------------------------------------------------------*/
  2106. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  2107. int CSkinProgress::SetStep
  2108. ( // Set <m_nStep> value
  2109.   int i_nStep // Set the step increment
  2110. )             
  2111.   int PrevStep;
  2112.   // Init
  2113.   // Process + Return
  2114.   if(IsWindow(GetSafeHwnd()))
  2115.   {
  2116.     PrevStep  = m_nStep;
  2117. // A..... Set the <m_nStep> step increment value
  2118.     m_nStep   = i_nStep;
  2119. // B..... Return the previous <m_nStep> step increment value
  2120.     return PrevStep;
  2121.   }
  2122.   else
  2123.   {
  2124.     return 0;
  2125.   }
  2126. }
  2127. /*--- START FUNCTION HEADER --------------------------------------------------*/
  2128. /* Name          : StepIt                                                     */
  2129. /* Role          : None                                                       */
  2130. /* Type          : public                                                     */
  2131. /* Interface     : RETURN (direct value)                                      */
  2132. /*                   int : Previous <m_nRight> position, 0 if error           */
  2133. /*                 OUTPUT (pointer to value)                                  */
  2134. /*                   None                                                     */
  2135. /*                 INPUT  (pointer to value, direct/default value)            */
  2136. /*                   i_bDisplay : Display the changes                         */
  2137. /* Pre-condition : None                                                       */
  2138. /* Constraints   : None                                                       */
  2139. /* Behavior      : A - Step the position                                      */
  2140. /*                 B - Display the changes                                    */
  2141. /*                 C - Return the previous position                           */
  2142. /*----------------------------------------------------------------------------*/
  2143. /* PROC StepIt                                                                */
  2144. /*                                                                            */
  2145. /* A..... Step the <m_nRight> position from the <m_nStep> increment value     */
  2146. /* B..... Display the changes                                                 */
  2147. /* C..... Return the previous <m_nRight> position                             */
  2148. /*----------------------------------------------------------------------------*/
  2149. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  2150. int CSkinProgress::StepIt
  2151. ( // Forward of <m_nStep> value
  2152. #ifndef dCSP_TIMED_REDRAW
  2153.   BOOL i_bDisplay // = true : Display the changes
  2154. #endif // dCSP_TIMED_REDRAW
  2155.   // Init
  2156.   // Process + Return
  2157.   if(IsWindow(GetSafeHwnd()))
  2158.   {
  2159.     m_nPrevRight  = m_nRight;
  2160. // A..... Step the <m_nRight> position from the <m_nStep> step increment value
  2161.     m_nRight     += m_nStep;
  2162.     if(m_nRight > m_nUpper)
  2163.     { // Avoid problems
  2164.       m_nRight = m_nUpper;
  2165.     }else{}
  2166.     if(m_nRight < m_nLower)
  2167.     { // Avoid problems
  2168.       m_nRight = m_nLower;
  2169.     }else{}
  2170. #ifdef dCSP_SLIDERBAR_METHOD
  2171.     if(m_nRight < m_nLeft)
  2172.     { // Avoid problems
  2173.       m_nRight = m_nLeft;
  2174.     }else{}
  2175. #endif // dCSP_SLIDERBAR_METHOD
  2176. // B..... Display the changes
  2177. #ifndef dCSP_TIMED_REDRAW
  2178.     if(i_bDisplay != false)
  2179.     {
  2180.       RefreshPanes();
  2181.     }else{}
  2182. #endif // dCSP_TIMED_REDRAW
  2183. // C..... Return the previous <m_nRight> position
  2184.     return m_nPrevRight;
  2185.   }
  2186.   else
  2187.   {
  2188.     return 0;
  2189.   }
  2190. }
  2191. // *** EXTENDED PROGRESS INTERFACE ***
  2192. /*--- START FUNCTION HEADER --------------------------------------------------*/
  2193. /* Name          : SetSize                                                    */
  2194. /* Role          : Change the size of the progress bar if in pane 0           */
  2195. /* Type          : public                                                     */
  2196. /* Interface     : RETURN (direct value)                                      */
  2197. /*                   BOOL = false : NEVER                                     */
  2198. /*                          true  : ALWAYS                                    */
  2199. /*                 OUTPUT (pointer to value)                                  */
  2200. /*                   None                                                     */
  2201. /*                 INPUT  (pointer to value, direct/default value)            */
  2202. /*                   i_nSize    : The new size of the progress bar in pane 0  */
  2203. /*                   i_bDisplay : Display the changes                         */
  2204. /* Pre-condition : None                                                       */
  2205. /* Constraints   : None                                                       */
  2206. /* Behavior      : A - Set the new size of the progress bar                   */
  2207. /*                 B - Display the resized progress bar                       */
  2208. /*----------------------------------------------------------------------------*/
  2209. /* PROC SetSize                                                               */
  2210. /*                                                                            */
  2211. /* A..... Set the new size of the progress bar                                */
  2212. /* B..... Display the resized progress bar                                    */
  2213. /*----------------------------------------------------------------------------*/
  2214. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  2215. BOOL CSkinProgress::SetSize
  2216. ( // Set size of the progress bar in pane 0 
  2217.   int  i_nSize     // Set the size of the progress bar
  2218. #ifndef dCSP_TIMED_REDRAW
  2219.  ,BOOL i_bDisplay // = true : Display the changes
  2220. #endif // dCSP_TIMED_REDRAW
  2221. )
  2222. {
  2223.   // Init
  2224. // A..... Set the new size of the progress bar
  2225.   if(i_nSize > 0)
  2226.   { // Due to pane anti-disclosure system and progress bar contour, must readapt the size
  2227.     i_nSize += 5;
  2228.   }
  2229.   else if(i_nSize < 0)
  2230.   {
  2231.     i_nSize -= 2;
  2232.   }else{}
  2233.   m_nSize = i_nSize;
  2234.   // Process
  2235. // B..... Display the resized progress bar
  2236. #ifndef dCSP_TIMED_REDRAW
  2237.   if(i_bDisplay != false)
  2238.   {
  2239.     RefreshPanes();
  2240.   }else{}
  2241. #endif // dCSP_TIMED_REDRAW
  2242.   // Return
  2243.   return true;
  2244. }
  2245. /*--- START FUNCTION HEADER --------------------------------------------------*/
  2246. /* Name          : GetSize                                                    */
  2247. /* Role          : Get width or height of the progress bar                    */
  2248. /* Type          : public                                                     */
  2249. /* Interface     : RETURN (direct value)                                      */
  2250. /*                   int : The width or height in pixel of the progress bar   */
  2251. /*                     0 : Error                                              */
  2252. /*                 OUTPUT (pointer to value)                                  */
  2253. /*                   None                                                     */
  2254. /*                 INPUT  (pointer to value, direct/default value)            */
  2255. /*                   None                                                     */
  2256. /* Pre-condition : None                                                       */
  2257. /* Constraints   : None                                                       */
  2258. /* Behavior      : A - Return the current <m_nSize> value                     */
  2259. /*                 B - Return the CWnd based pane size                        */
  2260. /*----------------------------------------------------------------------------*/
  2261. /* PROC SetStart                                                              */
  2262. /*                                                                            */
  2263. /* [IF progress bar in status bar]                                            */
  2264. /* : A..... Return the current <m_nSize> value                                */
  2265. /* [ELSE]                                                                     */
  2266. /* : [IF get the target pane rectangle]                                       */
  2267. /* : : B..... Return the CWnd based pane size                                 */
  2268. /* : : [IF the bar is not vertical]                                           */
  2269. /* : : : BA.... Return the width                                              */
  2270. /* : : [ELSE]                                                                 */
  2271. /* : : : BB.... Return the height                                             */
  2272. /* ; : [ENDIF]                                                                */
  2273. /* : [ELSE]                                                                   */
  2274. /* :   [ERROR]                                                                */
  2275. /* ; [ENDIF]                                                                  */
  2276. /* [ENDIF]                                                                    */
  2277. /*----------------------------------------------------------------------------*/
  2278. /*--- END FUNCTION HEADER ----------------------------------------------------*/
  2279. int CSkinProgress::GetSize
  2280. ( // Get width or height of the progress bar in pixel, mostly used in CSkinSlider