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

游戏引擎

开发平台:

Visual C++

  1. // ListBox.cpp: implementation of the CListBox class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "ListBox.h"
  6. #include <stdio.h>
  7. //////////////////////////////////////////////////////////////////////
  8. // Construction/Destruction
  9. //////////////////////////////////////////////////////////////////////
  10. CListBox::CListBox()
  11. {
  12. m_pEdit=NULL;
  13. m_bValueChanged=false;
  14. }
  15. CListBox::~CListBox()
  16. {
  17. if(m_pEdit != NULL)
  18. delete [] m_pEdit;
  19. }
  20. void CListBox::SetListBox(RECT rect,int numItem,char *titleFile,int curItem)
  21. {
  22. m_rect=rect;
  23. m_iMaxItem=numItem;
  24. m_pEdit=new CGraphEdit [m_iMaxItem];
  25. rect.left=m_rect.left+10;
  26. rect.right=m_rect.right-10;
  27. int height=rect.bottom-rect.top-4;
  28. height=height/m_iMaxItem;
  29. rect.top=m_rect.top+2;
  30. rect.bottom=rect.top+25;
  31. /////////////// get title string
  32. FILE *file;
  33. file = fopen(titleFile, "rt");
  34.     char **str=NULL;
  35.     if(file!=NULL)
  36. {
  37.     str=new char * [numItem];
  38.       for(int i=0;i<m_iMaxItem;i++)
  39. {
  40. str[i]=new char [32];
  41. char c=fgetc(file);
  42. int pos=0;
  43. while(c!=EOF && c!='n' && pos<29)
  44. {
  45.                 str[i][pos]=c;
  46. pos++;
  47. c=fgetc(file);
  48. }
  49. str[i][pos]=NULL;
  50. }
  51. fclose(file);
  52. }
  53. ///////////////////////////////
  54. char title[32];
  55. for(int  i=0;i<m_iMaxItem;i++)
  56. {
  57. if(str!=NULL)
  58. {
  59. strcpy(title,str[i]);
  60. delete [] str[i];
  61. }
  62. else
  63.     strcpy(title,"");
  64. m_pEdit[i].SetEdit(rect,title,28);
  65. rect.top+=height;
  66. rect.bottom+=height;
  67. m_pEdit[i].SetActivateColor(0,0.4f,0);
  68.     m_pEdit[i].SetNormalColor(0,0.4f,0);
  69. if(m_pEdit[i].m_sText[0]!=NULL)m_pEdit[i].SetEnableEdit(false);
  70. }
  71. if(str!=NULL)delete [] str;
  72. m_iSelect=0;
  73. m_pEdit[0].SetActivateColor(0,0.6f,0);
  74. m_pEdit[0].SetNormalColor(0,0.6f,0);
  75. m_pEdit[0].SetRectangleColor(0,1,0);
  76. }
  77. void CListBox::SetSelect(int iItem)
  78. {
  79. m_iSelect=iItem;
  80. if(m_iSelect>(m_iMaxItem-1))m_iSelect=0;
  81. if(m_iSelect<0)m_iSelect=0;
  82. }
  83. int  CListBox::GetSelect()
  84. {
  85. return m_iSelect;
  86. }
  87. void CListBox::RenderListBox()
  88. {   
  89. UpdateListBox();
  90. for(int i=0;i<m_iMaxItem;i++)
  91. {
  92. m_pEdit[i].RenderEdit();
  93. if(m_pEdit[i].m_sText[0]==NULL && !m_pEdit[i].IsEditting())
  94. {
  95. int x=(m_pEdit[i].m_rect.left+m_pEdit[i].m_rect.right)/2;
  96. int y=(m_pEdit[i].m_rect.top+m_pEdit[i].m_rect.bottom)/2;
  97. CImgText::PrintString(x,y,"New Player",true);
  98. }
  99. }
  100. }
  101. void  CListBox::UpdateListBox()
  102. {
  103. int old=m_iSelect;
  104. for(int i=0;i<m_iMaxItem;i++)
  105. {
  106. if(m_pEdit[i].m_bSelected)
  107. {
  108. m_iSelect=i;
  109. m_pEdit[i].SetActivateColor(0,0.6f,0);
  110. m_pEdit[i].SetNormalColor(0,0.6f,0);
  111. m_pEdit[i].SetRectangleColor(0,1,0);
  112. // if(m_pEdit[i].m_sText[0]==NULL)m_pEdit[i].SetEnableEdit(true);
  113. // else m_pEdit[i].SetEnableEdit(false);
  114. }
  115. }
  116. if(old!=m_iSelect)
  117. {
  118. m_bValueChanged=true;
  119.         m_pEdit[old].SetActivateColor(0,0.4f,0);
  120. m_pEdit[old].SetNormalColor(0,0.4f,0);
  121. m_pEdit[old].SetRectangleColor(0,0.6f,0);
  122. }
  123. else m_bValueChanged=false;
  124. }
  125. void CListBox::ClearCurrentItem()
  126. {
  127. m_pEdit[m_iSelect].Clear();
  128. }
  129. void CListBox::SetCurrentItemEnableEdit()
  130. {
  131. m_pEdit[m_iSelect].GetFocus();
  132. }
  133. void CListBox::SaveItemTitle(char *titleFile)
  134. {
  135. FILE *file;
  136. file = fopen("script/players.txt", "wt");
  137.     if(file!=NULL)
  138. {
  139.       for(int i=0;i<m_iMaxItem;i++)
  140. {
  141. fputs(m_pEdit[i].m_sText,file);
  142. fputc('n',file);
  143. }
  144. fclose(file);
  145. }
  146. }