UiLoginBg.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:4k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /*****************************************************************************************
  2. // 界面--login过程背景窗口
  3. // Copyright : Kingsoft 2002
  4. // Author :   Wooy(Wu yue)
  5. // CreateTime: 2002-12-16
  6. *****************************************************************************************/
  7. #include "KWin32.h"
  8. #include "KIniFile.h"
  9. #include "../Elem/Wnds.h"
  10. #include "../UiBase.h"
  11. #include "UiLoginBg.h"
  12. #define SCHEME_INI "登陆过程背景窗口.ini"
  13. KUiLoginBackGround* KUiLoginBackGround::m_pSelf = NULL;
  14. //--------------------------------------------------------------------------
  15. // 功能:打开窗口,返回唯一的一个类对象实例
  16. //--------------------------------------------------------------------------
  17. KUiLoginBackGround* KUiLoginBackGround::OpenWindow(const char* pszConfig)
  18. {
  19. if (m_pSelf == NULL)
  20. {
  21. m_pSelf = new KUiLoginBackGround;
  22. if (m_pSelf)
  23. m_pSelf->Initialize();
  24. }
  25. if (m_pSelf)
  26. {
  27. SetConfig(pszConfig);
  28. m_pSelf->Show();
  29. }
  30. return m_pSelf;
  31. }
  32. //--------------------------------------------------------------------------
  33. // 功能:关闭窗口,同时可以选则是否删除对象实例
  34. //--------------------------------------------------------------------------
  35. void KUiLoginBackGround::CloseWindow(bool bDestroy)
  36. {
  37. if (m_pSelf)
  38. {
  39. if (bDestroy == false)
  40. {
  41. m_pSelf->Hide();
  42. }
  43. else
  44. {
  45. m_pSelf->Destroy();
  46. m_pSelf = NULL;
  47. }
  48. }
  49. }
  50. //--------------------------------------------------------------------------
  51. // 功能:初始化
  52. //--------------------------------------------------------------------------
  53. void KUiLoginBackGround::Initialize()
  54. {
  55. AddChild(&m_VersionWnd);
  56. m_szConfig[0] = 0;
  57. for (int i = 0; i < MAX_NUM_BUTTERFLY; i++)
  58. {
  59. m_uAdviceIntervalMin[i] = 0;
  60. m_uInterval[i] = 0;
  61. m_uLastSleepTime[i] = 0;
  62. AddChild(&m_Butterflys[i]); 
  63. }
  64. char szVersion[80] = "";
  65. KIniFile* pSetting = g_UiBase.GetCommConfigFile();
  66. if (pSetting)
  67. {
  68. if (pSetting)
  69. pSetting->GetString("Main", "GameVersion", "", szVersion, sizeof(szVersion));
  70. g_UiBase.CloseCommConfigFile();
  71. }
  72. m_VersionWnd.SetText(szVersion);
  73. Wnd_AddWindow(this, WL_LOWEST);
  74. }
  75. //设置图形
  76. void KUiLoginBackGround::SetConfig(const char* pszConfig)
  77. {
  78. if (m_pSelf == NULL || pszConfig == NULL || pszConfig[0] == 0 ||
  79. strcmp(pszConfig, m_pSelf->m_szConfig) == 0)
  80. {
  81. return;
  82. }
  83. strncpy(m_pSelf->m_szConfig, pszConfig, sizeof(m_pSelf->m_szConfig));
  84. char Buff[256];
  85. KIniFile Ini;
  86. g_UiBase.GetCurSchemePath(Buff, 256);
  87. strcat(Buff, "\");
  88. strcat(Buff, SCHEME_INI);
  89. if (Ini.Load(Buff))
  90. m_pSelf->LoadScheme(&Ini);
  91. }
  92. //载入界面方案
  93. void KUiLoginBackGround::LoadScheme(KIniFile* pIni)
  94. {
  95. if (pIni)
  96. {
  97. char Buff[128];
  98. strcpy(Buff, m_szConfig);
  99. Init(pIni, Buff);
  100. m_VersionWnd.Init(pIni, "VersionText");
  101. for (int i = 0; i < MAX_NUM_BUTTERFLY; i++)
  102. {
  103. sprintf(Buff, "%s_Butterfly_%d", m_szConfig, i);
  104. m_Butterflys[i].Init(pIni, Buff);
  105. m_uAdviceIntervalMin[i] = m_uAdviceIntervalMax[i] = 0;
  106. pIni->GetInteger2(Buff, "Interval", (int*)&m_uAdviceIntervalMin[i],
  107. (int*)&m_uAdviceIntervalMax[i]);
  108. if (m_uAdviceIntervalMin[i] && m_uAdviceIntervalMax[i] < m_uAdviceIntervalMin[i])
  109. {
  110. m_uAdviceIntervalMax[i] = m_uAdviceIntervalMin[i];
  111. }
  112. m_uInterval[i] = 0;
  113. }
  114. }
  115. }
  116. //活动函数
  117. void KUiLoginBackGround::Breathe()
  118. {
  119. for (int i = 0; i < MAX_NUM_BUTTERFLY; i++)
  120. {
  121. if (m_uAdviceIntervalMin[i])
  122. {
  123. if (m_uInterval[i] == 0)
  124. {
  125. if (m_Butterflys[i].NextFrame())
  126. {
  127. m_uLastSleepTime[i] = IR_GetCurrentTime();
  128. m_uInterval[i] = m_uAdviceIntervalMin[i] +
  129. (rand() % (m_uAdviceIntervalMax[i] - m_uAdviceIntervalMin[i]));
  130. }
  131. }
  132. else if (IR_IsTimePassed(m_uInterval[i], m_uLastSleepTime[i]))
  133. {
  134. m_Butterflys[i].UpdateTimer();
  135. m_uInterval[i] = 0;
  136. }
  137. }
  138. else
  139. {
  140. m_Butterflys[i].NextFrame();
  141. }
  142. }
  143. }