ChangeBar.cpp
上传用户:hkb425
上传日期:2007-06-16
资源大小:34191k
文件大小:4k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. // ChangeBar.cpp: implementation of the CChangeBar class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "ChangeBar.h"
  6. //////////////////////////////////////////////////////////////////////
  7. // Construction/Destruction
  8. //////////////////////////////////////////////////////////////////////
  9. CChangeBar::CChangeBar()
  10. {
  11.     m_sText=NULL;
  12. m_texID=NULL;
  13.     m_iSelect=0;
  14.     m_bEnable=true;
  15. }
  16. CChangeBar::~CChangeBar()
  17. {
  18. if(m_texID!=NULL)
  19. {
  20. delete [] m_texID;
  21. }
  22. if(m_sText!=NULL)
  23. {
  24. for(int i=0;i<m_iMaxItem;i++)
  25.     delete [] m_sText[i];
  26.         delete [] m_sText;
  27. }
  28. }
  29. void CChangeBar::SetChangeBar(RECT rect, char **sText,int numItem,int curItem)
  30. {
  31. int width=rect.right-rect.left;
  32. int height=rect.bottom-rect.top;
  33. RECT rt=rect;
  34.     /////// set spin
  35. rt.right=rt.left+height;
  36. m_cSpin[0].SetSpin(rt,1);
  37. rt.right=rect.right;
  38. rt.left=rt.right-height;
  39. m_cSpin[1].SetSpin(rt,0);
  40.     /////// Set button
  41. if(numItem>32)numItem=32;
  42. m_iMaxItem=numItem;
  43. m_sText=new char*[numItem];
  44.     for(int i=0;i<numItem;i++)
  45. {
  46. m_sText[i]=new char [32];
  47.      strcpy(m_sText[i],sText[i]);
  48. }
  49. rt.left=rect.left+ int(height*1.2f);
  50. rt.right=rect.right-int(height*1.2f);
  51. m_iSelect=curItem;
  52. if(m_iSelect>(numItem-1))m_iSelect=0;
  53.  
  54. m_cButton.SetButton(rt,m_sText[m_iSelect]);
  55. }
  56. void CChangeBar::SetChangeBar(RECT rect, unsigned int *texID,int numItem,int curItem)
  57. {
  58. int width=rect.right-rect.left;
  59. int height=rect.bottom-rect.top;
  60. RECT rt=rect;
  61.     /////// set spin
  62. rt.top=rect.top+int(height*0.4f);
  63. rt.bottom=rect.top+int(height*0.6f);
  64. rt.right=rt.left+int(width*0.035f);
  65. m_cSpin[0].SetSpin(rt,1);
  66. rt.right=rect.right;
  67. rt.left=rt.right-int(width*0.035f);
  68. m_cSpin[1].SetSpin(rt,0);
  69.     /////// Set button
  70. m_iMaxItem=numItem;
  71. m_texID=new unsigned int [numItem];
  72. for(int i=0;i<numItem;i++)
  73. m_texID[i]=texID[i];
  74.     rt=rect;
  75. rt.left=rect.left+ int(height*0.08f);
  76. rt.right=rect.right-int(height*0.08f);
  77. m_iSelect=curItem;
  78. if(m_iSelect>(numItem-1))m_iSelect=0;
  79. m_cButton.SetButton(rt,m_texID[m_iSelect]);
  80. }
  81. void CChangeBar::SetEnable(bool bState)
  82. {
  83. m_bEnable=bState;
  84. if(m_bEnable)
  85. {
  86. m_cSpin[0].m_iState=BUTTON_NORMAL;
  87. m_cSpin[1].m_iState=BUTTON_NORMAL;
  88.         m_cButton.m_iState=BUTTON_NORMAL;
  89. }
  90. else
  91. {
  92. m_cSpin[0].m_iState=BUTTON_DEAD;
  93. m_cSpin[1].m_iState=BUTTON_DEAD;
  94.         m_cButton.m_iState=BUTTON_DEAD;
  95. }
  96. }
  97. void CChangeBar::RenderChangeBar()
  98. {
  99. UpdateChangeBar();
  100. m_cSpin[0].RenderSpin();
  101. m_cSpin[1].RenderSpin();
  102. m_cButton.RenderButton();
  103. }
  104. void   CChangeBar::UpdateChangeBar()
  105. {
  106. int oldValue=m_iSelect;
  107. if(m_cButton.m_bSelected)
  108. {
  109. m_cButton.m_bSelected=false;
  110. m_iSelect++;
  111. if(m_iSelect==m_iMaxItem)m_iSelect=0;
  112. UpdateButtonShow();
  113. }
  114. if(m_cSpin[0].m_bSelected)
  115. {
  116. m_cSpin[0].m_bSelected=false;
  117. m_iSelect--;
  118. if(m_iSelect==-1)m_iSelect=m_iMaxItem-1;
  119. UpdateButtonShow();
  120. }
  121. if(m_cSpin[1].m_bSelected)
  122. {
  123. m_cSpin[1].m_bSelected=false;
  124. m_iSelect++;
  125. if(m_iSelect==m_iMaxItem)m_iSelect=0;
  126. UpdateButtonShow();
  127. }
  128. if(oldValue!=m_iSelect)m_bValueChanged=true;
  129. else m_bValueChanged=false;
  130. }
  131. void CChangeBar::UpdateButtonShow()
  132. {
  133. if(m_cButton.m_bShowPicture)
  134. m_cButton.SetButtonPicture(m_texID[m_iSelect]);
  135. else
  136. {
  137. m_cButton.SetButtonText(m_sText[m_iSelect]);
  138. }
  139. }
  140. void CChangeBar::SetItem(int iItem)
  141. {
  142. m_iSelect=iItem;
  143. if(m_iSelect>(m_iMaxItem-1))m_iSelect=m_iMaxItem-1;
  144. if(m_iSelect<0)m_iSelect=0;
  145. UpdateButtonShow();
  146. }
  147. int  CChangeBar::GetSelected()
  148. {
  149.     return m_iSelect;
  150. }
  151. int   CChangeBar::GetTotalItemNumber()
  152. {
  153.     return m_iMaxItem;
  154. }
  155. /*
  156. void CChangeBar::GetString(char *string,int iItem)
  157. {
  158. if(m_sText==NULL)return;
  159. if(iItem>=m_iMaxItem)return;
  160. int len=strlen(m_sText);
  161. int start;
  162. int cur=0,i=0;
  163. //////find out start
  164. while(i!=iItem && cur<len)
  165. {
  166. if(m_sText[cur] == '`')
  167.     i++;
  168.         cur++;
  169. }
  170. start=cur;
  171. //////find out end
  172. while(cur<len)
  173. {
  174. if(m_sText[cur] == '`')
  175.     break;
  176.         cur++;
  177. }
  178.     int num=cur-start;
  179. if(num>32)num=32;
  180. for(i=0;i<num;i++)
  181. string[i]=m_sText[start+i];
  182. string[i]=NULL;
  183. }
  184. */