formMain.xaml.vb 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569
  1. Public Class formMain
  2. #Region "全窗体事件"
  3. ''' <summary>
  4. ''' 从Win10任务栏关闭。
  5. ''' </summary>
  6. ''' <param name="sender"></param>
  7. ''' <param name="e"></param>
  8. ''' <remarks></remarks>
  9. Private Sub formMain_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Me.Closing
  10. EndForce()
  11. End Sub
  12. ''' <summary>
  13. ''' 初始化加载。
  14. ''' </summary>
  15. ''' <param name="sender"></param>
  16. ''' <param name="e"></param>
  17. ''' <remarks></remarks>
  18. Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As EventArgs) Handles MyBase.ContentRendered
  19. Try
  20. log("[Main] 初始化开始")
  21. '数据统计
  22. 'If Not MODE_OFFLINE Then
  23. ' webData.Navigate(New Uri(QN_SERVER & "stats.html"))
  24. ' SetWebBrowserSilent(webData, True)
  25. 'End If
  26. '开始动画
  27. UseControlAnimation = True
  28. AniStartRun()
  29. AniLastTick = 0
  30. '检查最后的版本号
  31. Dim th As New Thread(Sub()
  32. frmMain.Dispatcher.Invoke(Sub()
  33. Select Case Val(ReadIni("setup", "LastVersionCode", "0"))
  34. Case VERSION_CODE
  35. '已经启动过当前版本
  36. Case 0
  37. '从未启动过
  38. WriteIni("setup", "LastVersionCode", VERSION_CODE)
  39. Case Is < VERSION_CODE
  40. '已经启动过老版本
  41. WriteIni("setup", "LastVersionCode", VERSION_CODE)
  42. OutputFileInResource("UpdateLog", PATH & "PCL\UpdateLog.txt", True)
  43. If File.Exists(PATH & "PCL\UpdateLog.txt") Then Shell("notepad", """" & PATH & "PCL\UpdateLog.txt""")
  44. End Select
  45. End Sub)
  46. End Sub)
  47. th.Start()
  48. '开始遍历
  49. timerRuntimeCheck.IsEnabled = True
  50. '播放 BGM
  51. If File.Exists(PATH & "PCL\bgm.wav") Or File.Exists(PATH & "PCL\bgm.mp3") Then
  52. If ReadIni("setup", "UiBgmAuto", "True") Then ChangeBgm()
  53. imgTopMusic.Visibility = Windows.Visibility.Visible
  54. Else
  55. imgTopMusic.Visibility = Windows.Visibility.Collapsed
  56. End If
  57. '首次启动
  58. If frmStart.IsFirstUsing Then
  59. log("[Main] 首次启动 PCL,进入设置向导")
  60. panTop.Height = 40
  61. labFirst.Visibility = Visibility.Visible
  62. panTopSelect.Visibility = Visibility.Collapsed
  63. labTopVer.Visibility = Visibility.Collapsed
  64. panGuild.Visibility = Visibility.Visible
  65. '控件置入
  66. Dim frmGuild As New formGuild
  67. If Not IsNothing(frmGuild.panMain.Parent) Then frmGuild.panMain.Parent.SetValue(ContentPresenter.ContentProperty, Nothing)
  68. panGuild.Children.Add(frmGuild.panMain)
  69. Exit Sub
  70. Else
  71. panTop.Height = 92
  72. labFirst.Visibility = Visibility.Collapsed
  73. panTopSelect.Visibility = Visibility.Visible
  74. labTopVer.Visibility = Visibility.Visible
  75. panGuild.Visibility = Visibility.Collapsed
  76. End If
  77. '打开 4 次或 99 次后请求反馈
  78. If ReadReg("RequiredFeedback", "False") = "False" And Not MODE_OFFLINE Then
  79. If Val(ReadIni("setup", "Count", "0")) >= 4 Then
  80. If MyMsgbox("你对 PCL 有没有什么建议?在刚开始使用时,你有没有什么不清楚的地方?" & vbCrLf & "有了你的反馈,PCL 才能够做得更好!", "用户反馈", "反馈", "取消") = 1 Then Process.Start("https://www.wjx.cn/jq/14677608.aspx")
  81. WriteReg("RequiredFeedback", "True")
  82. GoTo EndFeedback
  83. End If
  84. End If
  85. If ReadReg("RequiredFeedback2", "False") = "False" And Not MODE_OFFLINE Then
  86. If Val(ReadIni("setup", "Count", "0")) >= 99 Then
  87. Select Case MyMsgbox("你对 PCL 有没有什么建议?你觉得 PCL 怎样才能做得更好?我们期待你的反馈!" & vbCrLf & "你随时都可以通过设置进入反馈页面。", "用户反馈", "捐助", "反馈", "取消")
  88. Case 1
  89. '捐助
  90. Process.Start("https://afdian.net/@LTCat")
  91. Case 2
  92. '反馈
  93. Process.Start("https://www.wjx.cn/jq/14677608.aspx")
  94. End Select
  95. WriteReg("RequiredFeedback2", "True")
  96. End If
  97. End If
  98. EndFeedback:
  99. '打开 25 的倍数次的时候发送反馈信息
  100. If Val(ReadIni("setup", "Count", "0")) Mod 25 = 5 And Not MODE_OFFLINE Then
  101. Dim FeedbackThread As New Thread(Sub() FeedbackSetup())
  102. FeedbackThread.Priority = ThreadPriority.Lowest
  103. FeedbackThread.Start()
  104. End If
  105. '打开 10 的倍数次的时候发送次数反馈信息
  106. If Val(ReadIni("setup", "Count", "0")) Mod 10 = 1 And Not MODE_OFFLINE Then
  107. SendStat("反馈", "启动器打开次数", ReadIni("setup", "Count", "0"), ReadIni("setup", "Count", "0"))
  108. End If
  109. Catch ex As Exception
  110. ExShow(ex, "主窗体初始化失败", ErrorLevel.MsgboxAndFeedback)
  111. End Try
  112. End Sub
  113. ''' <summary>
  114. ''' 窗体拖动。
  115. ''' </summary>
  116. ''' <param name="sender"></param>
  117. ''' <param name="e"></param>
  118. ''' <remarks></remarks>
  119. Private Sub FormDragDown(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles labTopVer.MouseLeftButtonDown
  120. On Error Resume Next
  121. Me.DragMove()
  122. End Sub
  123. Private Sub FormDragDown(ByVal sender As Grid, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles panTop.MouseLeftButtonDown
  124. On Error Resume Next
  125. If sender.IsMouseDirectlyOver Then Me.DragMove()
  126. End Sub
  127. ''' <summary>
  128. ''' 在设置按钮隐藏时,双击版本号进入设置页。
  129. ''' </summary>
  130. ''' <param name="sender"></param>
  131. ''' <param name="e"></param>
  132. ''' <remarks></remarks>
  133. Private Sub labTopVer_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles labTopVer.MouseDoubleClick
  134. If btnTopSetup.Visibility = Visibility.Collapsed Then PageChange("设置")
  135. End Sub
  136. ''' <summary>
  137. ''' 按回车直接启动游戏。
  138. ''' </summary>
  139. ''' <param name="sender"></param>
  140. ''' <param name="e"></param>
  141. ''' <remarks></remarks>
  142. Private Sub formMain_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Input.KeyEventArgs) Handles Me.KeyDown
  143. If Math.Abs(ReadIni("setup", "UiLauncherOpacity", "100") / 100 - Me.Opacity) > 0.01 Then Exit Sub
  144. If PageSelect = "首页" And e.Key = Key.Enter Then frmHomeRight.ClickStartButton()
  145. End Sub
  146. #End Region
  147. #Region "动画"
  148. '指向动画
  149. Private Sub AniMouseEnter(ByVal sender As Object, ByVal e As System.Windows.Input.MouseEventArgs) Handles imgTopMin.MouseEnter, imgTopClose.MouseEnter, imgTopMusic.MouseEnter
  150. AniStart({AaOpacity(sender, 0.75 - sender.Opacity, 80)}, "MouseEnter" & sender.Name)
  151. End Sub
  152. Private Sub AniMouseLeave(ByVal sender As Object, ByVal e As System.Windows.Input.MouseEventArgs) Handles imgTopMin.MouseLeave, imgTopClose.MouseLeave, imgTopMusic.MouseLeave
  153. AniStart({AaOpacity(sender, 0.35 - sender.Opacity, 80)}, "MouseEnter" & sender.Name)
  154. btnTopMin_Down = False
  155. btnTopClose_Down = False
  156. End Sub
  157. Private Sub AniMouseEnter2(ByVal sender As Object, ByVal e As System.Windows.Input.MouseEventArgs) Handles btnTopMain.MouseEnter, btnTopManage.MouseEnter, btnTopDown.MouseEnter, btnTopHelp.MouseEnter, btnTopSetup.MouseEnter
  158. If PageSelect = sender.Tag Or panTopSelect.Tag = "Changing" Then Exit Sub '已经选中的项目、切换中不响应事件
  159. AniStart({AaOpacity(sender, 0.75 - sender.Opacity, 80)}, "MouseEnter" & sender.Name)
  160. End Sub
  161. Private Sub AniMouseLeave2(ByVal sender As Object, ByVal e As System.Windows.Input.MouseEventArgs) Handles btnTopMain.MouseLeave, btnTopManage.MouseLeave, btnTopDown.MouseLeave, btnTopHelp.MouseLeave, btnTopSetup.MouseLeave
  162. If PageSelect = sender.Tag Or panTopSelect.Tag = "Changing" Then Exit Sub '已经选中的项目、切换中不响应事件
  163. AniStart({AaOpacity(sender, 0.35 - sender.Opacity, 80)}, "MouseEnter" & sender.Name)
  164. End Sub
  165. #End Region
  166. #Region "最小化、关闭、音乐"
  167. Private btnTopMin_Down As Boolean = False
  168. Private Sub btnTopMin_MouseLeftButtonDown(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles imgTopMin.MouseLeftButtonDown
  169. btnTopMin_Down = True
  170. End Sub
  171. Private Sub imgTopMin_MouseLeftButtonUp(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles imgTopMin.MouseLeftButtonUp
  172. If Not btnTopMin_Down Then Exit Sub
  173. btnTopMin_Down = False
  174. log("[Main] 点击最小化按钮")
  175. Me.WindowState = WindowState.Minimized
  176. End Sub
  177. Private btnTopClose_Down As Boolean = False
  178. Private Sub imgTopClose_MouseLeftButtonDown(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles imgTopClose.MouseLeftButtonDown
  179. btnTopClose_Down = True
  180. End Sub
  181. Private Sub btnTopClose_MouseLeftButtonUp(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles imgTopClose.MouseLeftButtonUp
  182. If Not btnTopClose_Down Then Exit Sub
  183. btnTopClose_Down = False
  184. log("[Main] 点击关闭按钮")
  185. EndNormal()
  186. End Sub
  187. Private btnTopMusic_Down As Boolean = False
  188. Private Sub imgTopMusic_MouseLeftButtonDown(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles imgTopMusic.MouseLeftButtonDown
  189. btnTopMusic_Down = True
  190. End Sub
  191. Private Sub btnTopMusic_MouseLeftButtonUp() Handles imgTopMusic.MouseLeftButtonUp
  192. If Not btnTopMusic_Down Then Exit Sub
  193. btnTopMusic_Down = False
  194. ChangeBgm()
  195. End Sub
  196. ''' <summary>
  197. ''' 切换 BGM 播放状态。
  198. ''' </summary>
  199. ''' <remarks></remarks>
  200. Public Sub ChangeBgm()
  201. Try
  202. Dim FilePath As String = If(File.Exists(PATH & "PCL\bgm.wav"), PATH & "PCL\bgm.wav", PATH & "PCL\bgm.mp3")
  203. If IsPlayingMusic Then
  204. PlayBgm(FilePath, True)
  205. Else
  206. PlayBgm(FilePath, False)
  207. End If
  208. IsPlayingMusic = Not IsPlayingMusic
  209. Catch ex As Exception
  210. ExShow(ex, "切换音乐播放出错", ErrorLevel.MsgboxAndFeedback)
  211. End Try
  212. End Sub
  213. #End Region
  214. #Region "顶部选择条"
  215. ''' <summary>
  216. ''' 当前选择的页面名称,如“首页”。
  217. ''' </summary>
  218. ''' <remarks></remarks>
  219. Public PageSelect As String = "首页"
  220. ''' <summary>
  221. ''' 当前选择的页面编号,首页为0。
  222. ''' </summary>
  223. ''' <remarks></remarks>
  224. Public PageSelectId As Integer = 0
  225. Public ENTER_PAGE_TIME As Integer = 200
  226. Public LEAVE_PAGE_TIME As Integer = 100
  227. Public Const CHANGE_PAGE_DISTANCE As Integer = 65
  228. ''' <summary>
  229. ''' 切换页面
  230. ''' </summary>
  231. ''' <param name="PageNew">页面的名称,如“首页”</param>
  232. ''' <remarks></remarks>
  233. Public Sub PageChange(ByVal PageNew As String)
  234. Try
  235. '已经选中的项目不响应事件
  236. If PageNew = PageSelect Then Exit Sub
  237. '初始化
  238. frmHomeLeft.timerPage.Reset()
  239. '改变页面
  240. AniStop("HomeLeftChange")
  241. Select Case PageNew
  242. Case "管理"
  243. SendPage("manage")
  244. '计算动画朝向
  245. Dim Towards As Integer = If(PageSelectId < 1, -1, 1)
  246. '切换页面的动画,用对象保存再单独丢出去会莫名找不到对象
  247. If Not IsNothing(frmManageLeft.panMain.Parent) Then frmManageLeft.panMain.Parent.SetValue(ContentPresenter.ContentProperty, Nothing)
  248. If Not IsNothing(frmManageRight.panMain.Parent) Then frmManageRight.panMain.Parent.SetValue(ContentPresenter.ContentProperty, Nothing)
  249. frmHomeRight.HideVersion()
  250. AniStart({
  251. AaOpacity(panMain, -panMain.Opacity, LEAVE_PAGE_TIME),
  252. AaX(panMain, CHANGE_PAGE_DISTANCE * Towards - panMain.Margin.Left, LEAVE_PAGE_TIME, , New AniEaseStart),
  253. AaCode({"Clear", panHostLeft.Children}, , True),
  254. AaCode({"Clear", panHostRight.Children}),
  255. AaCode({"Add", panHostLeft.Children, frmManageLeft.panMain}),
  256. AaCode({"Add", panHostRight.Children, frmManageRight.panMain}),
  257. AaX(panMain, -CHANGE_PAGE_DISTANCE * 2 * Towards, 1),
  258. AaX(panMain, CHANGE_PAGE_DISTANCE * Towards, ENTER_PAGE_TIME, , New AniEaseJumpEnd(0.6)),
  259. AaOpacity(panMain, 1, ENTER_PAGE_TIME)
  260. }, "HomeLeftChange")
  261. '顶部条的动画
  262. AniStart({
  263. AaOpacity(btnTopMain, 0.35 - btnTopMain.Opacity, 80),
  264. AaOpacity(btnTopManage, 1 - btnTopManage.Opacity, 80),
  265. AaOpacity(btnTopDown, 0.35 - btnTopDown.Opacity, 80),
  266. AaOpacity(btnTopHelp, 0.35 - btnTopHelp.Opacity, 80),
  267. AaOpacity(btnTopSetup, 0.35 - btnTopSetup.Opacity, 80)
  268. }, "HomeLeftChange2")
  269. PageSelectId = 1
  270. Case "下载"
  271. SendPage("download")
  272. If IsNothing(frmDownloadRight) Then frmDownloadRight = New formDownloadRight
  273. Dim Towards As Integer = If(PageSelectId < 2, -1, 1)
  274. If Not IsNothing(frmDownloadLeft.panMain.Parent) Then frmDownloadLeft.panMain.Parent.SetValue(ContentPresenter.ContentProperty, Nothing)
  275. If Not IsNothing(frmDownloadRight.panMain.Parent) Then frmDownloadRight.panMain.Parent.SetValue(ContentPresenter.ContentProperty, Nothing)
  276. frmHomeRight.HideVersion()
  277. AniStart({
  278. AaOpacity(panMain, -panMain.Opacity, LEAVE_PAGE_TIME),
  279. AaX(panMain, CHANGE_PAGE_DISTANCE * Towards - panMain.Margin.Left, LEAVE_PAGE_TIME, , New AniEaseStart),
  280. AaCode({"Clear", panHostLeft.Children}, , True),
  281. AaCode({"Clear", panHostRight.Children}),
  282. AaCode({"Add", panHostLeft.Children, frmDownloadLeft.panMain}),
  283. AaCode({"Add", panHostRight.Children, frmDownloadRight.panMain}),
  284. AaX(panMain, -CHANGE_PAGE_DISTANCE * 2 * Towards, 1),
  285. AaX(panMain, CHANGE_PAGE_DISTANCE * Towards, ENTER_PAGE_TIME, , New AniEaseJumpEnd(0.6)),
  286. AaOpacity(panMain, 1, ENTER_PAGE_TIME)
  287. }, "HomeLeftChange")
  288. AniStart({
  289. AaOpacity(btnTopMain, 0.35 - btnTopMain.Opacity, 80),
  290. AaOpacity(btnTopManage, 0.35 - btnTopManage.Opacity, 80),
  291. AaOpacity(btnTopDown, 1 - btnTopDown.Opacity, 80),
  292. AaOpacity(btnTopHelp, 0.35 - btnTopHelp.Opacity, 80),
  293. AaOpacity(btnTopSetup, 0.35 - btnTopSetup.Opacity, 80)
  294. }, "HomeLeftChange2")
  295. PageSelectId = 2
  296. Case "帮助"
  297. SendPage("help")
  298. Dim Towards As Integer = If(PageSelectId < 3, -1, 1)
  299. If Not IsNothing(frmHelpLeft.panMain.Parent) Then frmHelpLeft.panMain.Parent.SetValue(ContentPresenter.ContentProperty, Nothing)
  300. If Not IsNothing(frmHelpRight.panMain.Parent) Then frmHelpRight.panMain.Parent.SetValue(ContentPresenter.ContentProperty, Nothing)
  301. frmHomeRight.HideVersion()
  302. AniStart({
  303. AaOpacity(panMain, -panMain.Opacity, LEAVE_PAGE_TIME),
  304. AaX(panMain, CHANGE_PAGE_DISTANCE * Towards - panMain.Margin.Left, LEAVE_PAGE_TIME, , New AniEaseStart),
  305. AaCode({"Clear", panHostLeft.Children}, , True),
  306. AaCode({"Clear", panHostRight.Children}),
  307. AaCode({"Add", panHostLeft.Children, frmHelpLeft.panMain}),
  308. AaCode({"Add", panHostRight.Children, frmHelpRight.panMain}),
  309. AaX(panMain, -CHANGE_PAGE_DISTANCE * 2 * Towards, 1),
  310. AaX(panMain, CHANGE_PAGE_DISTANCE * Towards, ENTER_PAGE_TIME, , New AniEaseJumpEnd(0.6)),
  311. AaOpacity(panMain, 1, ENTER_PAGE_TIME)
  312. }, "HomeLeftChange")
  313. AniStart({
  314. AaOpacity(btnTopMain, 0.35 - btnTopMain.Opacity, 80),
  315. AaOpacity(btnTopManage, 0.35 - btnTopManage.Opacity, 80),
  316. AaOpacity(btnTopDown, 0.35 - btnTopDown.Opacity, 80),
  317. AaOpacity(btnTopHelp, 1 - btnTopHelp.Opacity, 80),
  318. AaOpacity(btnTopSetup, 0.35 - btnTopSetup.Opacity, 80)
  319. }, "HomeLeftChange2")
  320. PageSelectId = 3
  321. Case "设置"
  322. SendPage("setup")
  323. If IsNothing(frmSetup) Then frmSetup = New formSetup
  324. Dim Towards As Integer = If(PageSelectId < 4, -1, 1)
  325. If Not IsNothing(frmSetup.panMain.Parent) Then frmSetup.panMain.Parent.SetValue(ContentPresenter.ContentProperty, Nothing)
  326. frmHomeRight.HideVersion()
  327. AniStart({
  328. AaOpacity(panMain, -panMain.Opacity, LEAVE_PAGE_TIME),
  329. AaX(panMain, CHANGE_PAGE_DISTANCE * Towards - panMain.Margin.Left, LEAVE_PAGE_TIME, , New AniEaseStart),
  330. AaCode({"Clear", panHostLeft.Children}, , True),
  331. AaCode({"Clear", panHostRight.Children}),
  332. AaCode({"Add", panHostLeft.Children, frmSetup.panMain}),
  333. AaX(panMain, -CHANGE_PAGE_DISTANCE * 2 * Towards, 1),
  334. AaX(panMain, CHANGE_PAGE_DISTANCE * Towards, ENTER_PAGE_TIME, , New AniEaseJumpEnd(0.6)),
  335. AaOpacity(panMain, 1, ENTER_PAGE_TIME)
  336. }, "HomeLeftChange")
  337. AniStart({
  338. AaOpacity(btnTopMain, 0.35 - btnTopMain.Opacity, 80),
  339. AaOpacity(btnTopManage, 0.35 - btnTopManage.Opacity, 80),
  340. AaOpacity(btnTopDown, 0.35 - btnTopDown.Opacity, 80),
  341. AaOpacity(btnTopHelp, 0.35 - btnTopHelp.Opacity, 80),
  342. AaOpacity(btnTopSetup, 1 - btnTopSetup.Opacity, 80)
  343. }, "HomeLeftChange2")
  344. PageSelectId = 4
  345. Case Else '首页作为默认选项
  346. SendPage("stats")
  347. Dim Towards As Integer = If(PageSelectId < 0, -1, 1)
  348. If Not IsNothing(frmHomeLeft.panMain.Parent) Then frmHomeLeft.panMain.Parent.SetValue(ContentPresenter.ContentProperty, Nothing)
  349. If Not IsNothing(frmHomeRight.panMain.Parent) Then frmHomeRight.panMain.Parent.SetValue(ContentPresenter.ContentProperty, Nothing)
  350. AniStart({
  351. AaOpacity(panMain, -panMain.Opacity, LEAVE_PAGE_TIME),
  352. AaX(panMain, CHANGE_PAGE_DISTANCE * Towards - panMain.Margin.Left, LEAVE_PAGE_TIME, , New AniEaseStart),
  353. AaCode({"Clear", panHostLeft.Children}, , True),
  354. AaCode({"Clear", panHostRight.Children}),
  355. AaCode({"Add", panHostLeft.Children, frmHomeLeft.panMain}),
  356. AaCode({"Add", panHostRight.Children, frmHomeRight.panMain}),
  357. AaX(panMain, -CHANGE_PAGE_DISTANCE * 2 * Towards, 1),
  358. AaX(panMain, CHANGE_PAGE_DISTANCE * Towards, ENTER_PAGE_TIME, , New AniEaseJumpEnd(0.6)),
  359. AaOpacity(panMain, 1, ENTER_PAGE_TIME)
  360. }, "HomeLeftChange")
  361. AniStart({
  362. AaOpacity(btnTopMain, 1 - btnTopMain.Opacity, 80),
  363. AaOpacity(btnTopManage, 0.35 - btnTopManage.Opacity, 80),
  364. AaOpacity(btnTopDown, 0.35 - btnTopDown.Opacity, 80),
  365. AaOpacity(btnTopHelp, 0.35 - btnTopHelp.Opacity, 80),
  366. AaOpacity(btnTopSetup, 0.35 - btnTopSetup.Opacity, 80)
  367. }, "HomeLeftChange2")
  368. PageSelectId = 0
  369. End Select
  370. '回设
  371. PageSelect = PageNew
  372. Catch ex As Exception
  373. ExShow(ex, "切换页面失败", ErrorLevel.MsgboxAndFeedback)
  374. End Try
  375. End Sub
  376. ''' <summary>
  377. ''' 点击Grid触发切换页面
  378. ''' </summary>
  379. ''' <param name="sender"></param>
  380. ''' <param name="e"></param>
  381. ''' <remarks></remarks>
  382. Private Sub PageChangeClick(ByVal sender As Grid, ByVal e As EventArgs) Handles btnTopMain.MouseLeftButtonUp, btnTopManage.MouseLeftButtonUp, btnTopDown.MouseLeftButtonUp, btnTopHelp.MouseLeftButtonUp, btnTopSetup.MouseLeftButtonUp
  383. PageChange(sender.Tag)
  384. End Sub
  385. #End Region
  386. #Region "文件拖放"
  387. '进入的动画
  388. Private Sub AniDragEnter() Handles panBack.DragEnter
  389. AniStart({
  390. AaOpacity(panDrag, 1 - panDrag.Opacity, 150)
  391. }, "frmMainDrag", False)
  392. End Sub
  393. '离开的动画
  394. Private Sub AniDragLeave() Handles panBack.DragLeave, panBack.Drop
  395. AniStart({
  396. AaOpacity(panDrag, -panDrag.Opacity, 150)
  397. }, "frmMainDrag", False)
  398. End Sub
  399. '接受文件拖放
  400. Private Sub panBack_DragEnter(ByVal sender As Object, ByVal e As System.Windows.DragEventArgs) Handles panBack.DragEnter
  401. '接受拖放
  402. e.Effects = DragDropEffects.Link
  403. End Sub
  404. '文件放入
  405. Private Sub panBack_Drop(ByVal sender As Object, ByVal e As System.Windows.DragEventArgs) Handles panBack.Drop
  406. '获取文件列表
  407. Dim FilePathList As New ArrayList
  408. Try
  409. FilePathList.AddRange(CType(e.Data.GetData(DataFormats.FileDrop), Array))
  410. If FilePathList.Count = 0 Then Exit Sub
  411. Catch
  412. Exit Sub
  413. End Try
  414. '处理文件
  415. For Each File As String In FilePathList
  416. AutoSetup(File)
  417. Next
  418. End Sub
  419. #End Region
  420. #Region "任务栏"
  421. Private Sub CommandBinding_Executed(ByVal sender As System.Object, ByVal e As System.Windows.Input.ExecutedRoutedEventArgs)
  422. frmHomeRight.ClickStartButton()
  423. e.Handled = True
  424. End Sub
  425. Private Sub CommandBinding_CanExecute(ByVal sender As System.Object, ByVal e As System.Windows.Input.CanExecuteRoutedEventArgs)
  426. e.CanExecute = True
  427. e.Handled = True
  428. End Sub
  429. #End Region
  430. Private IsRamWarned As Boolean = False
  431. Private IsSendStat As Boolean = False
  432. Private Sub timerRuntimeCheck_Tick() Handles timerRuntimeCheck.Tick
  433. Try
  434. '显示提示
  435. If WaitingHint.Count > 1 Then WaitingHint = ArrayNoDouble(WaitingHint.ToArray)
  436. Do While WaitingHint.Count > 0
  437. WaitingHint(0).Text = WaitingHint(0).Text.Replace(vbCrLf, " ").Replace(vbCr, " ").Replace(vbLf, " ") '去回车
  438. log("[Main] 显示弹出提示:" & CType(WaitingHint(0), HintConverter).toString)
  439. '准备控件
  440. Dim NewGrid As New Grid With {.Name = "panHintChildren" & GetUUID(), .Opacity = 0, .Background = New MyColor(CType(WaitingHint(0), HintConverter)), .Height = 0, .HorizontalAlignment = HorizontalAlignment.Left, .Margin = New Thickness(-15, 0, 0, 0)}
  441. NewGrid.Children.Add(New Label With {.Content = WaitingHint(0).Text, .FontSize = 13, .Foreground = New MyColor(255, 255, 255), .Height = 25, .HorizontalAlignment = HorizontalAlignment.Left, .Padding = New Thickness(23, 0, 7, 0), .VerticalAlignment = VerticalAlignment.Center, .VerticalContentAlignment = VerticalAlignment.Center})
  442. NewGrid.Children.Add(New Image With {.Height = 16, .HorizontalAlignment = HorizontalAlignment.Left, .Margin = New Thickness(4, 5, 0, 4), .VerticalAlignment = VerticalAlignment.Center, .Width = 16, .Source = CType((New ImageSourceConverter).ConvertFromString(PATH_IMAGE & "Hint-" & WaitingHint(0).GetTypeName & ".png"), ImageSource)})
  443. frmMain.panHint.Children.Add(NewGrid)
  444. '控件动画
  445. 'NewGrid 高度增加25px,向右移动15px,透明度增加1
  446. '等待大约3秒后,NewGrid 平滑收回并且删除
  447. AniStart({
  448. AaX(NewGrid, 15, , , New AniEaseEnd),
  449. AaOpacity(NewGrid, 1, 200),
  450. AaHeight(NewGrid, 25, , , New AniEaseEnd),
  451. AaOpacity(NewGrid, -1, 200, 850 + MathRange(Len(WaitingHint(0).Text), 5, 23) * 180),
  452. AaHeight(NewGrid, -25, 300, 850 + MathRange(Len(WaitingHint(0).Text), 5, 23) * 180, New AniEaseEnd),
  453. AaCode({"Remove", frmMain.panHint.Children, NewGrid}, , True)
  454. }, "ShowHint" & GetUUID())
  455. WaitingHint.RemoveAt(0)
  456. Loop
  457. '显示弹窗
  458. Do While WaitingHintWindow.Count > 0
  459. WaitingHintWindow(0)(1) = WaitingHintWindow(0)(1).Replace(vbCrLf, " ").Replace(vbCr, " ").Replace(vbLf, " ") '去回车
  460. log("[Main] 显示弹出提示窗口:" & WaitingHintWindow(0)(0) & ",内容:" & WaitingHintWindow(0)(1))
  461. '准备窗口
  462. Dim Window As New formHint
  463. Window.labTitle.Content = WaitingHintWindow(0)(0)
  464. Window.labText.Text = WaitingHintWindow(0)(1)
  465. Window.Show()
  466. '控件动画
  467. 'AniStart({
  468. ' AaX(NewGrid, 15, , , AniAdditionType.FadeOut),
  469. ' AaOpacity(NewGrid, 1, 200),
  470. ' AaHeight(NewGrid, 25, , , AniAdditionType.FadeOut),
  471. ' AaOpacity(NewGrid, -1, 200, 850 + MathRange(Len(WaitingHint(0).Text), 5, 20) * 160, 120),
  472. ' AaHeight(NewGrid, -25, 300, 850 + MathRange(Len(WaitingHint(0).Text), 5, 20) * 160, AniAdditionType.FadeOut),
  473. ' AaCode({"Remove", frmMain.panHint.Children, NewGrid}, , True)
  474. ' }, "ShowHint" & GetUUID())
  475. WaitingHintWindow.RemoveAt(0)
  476. Loop
  477. '彩蛋检查
  478. If panHint.ActualHeight > MAINFORM_HEIGHT - 20 And Not IsShowingDeathBlue Then
  479. If ReadReg("ThemeDeathBlue", "False") = "False" Then
  480. IsShowingDeathBlue = True
  481. Dim BlueScreen As New formBlueScreen
  482. BlueScreen.Show()
  483. End If
  484. End If
  485. '显示弹窗
  486. Do While WaitingMyMsgbox.Count > 0
  487. MyMsgbox(WaitingMyMsgbox(0))
  488. WaitingMyMsgbox.RemoveAt(0)
  489. Loop
  490. '显示内存警告
  491. Dim RamLeft As Integer = (New Devices.ComputerInfo).AvailablePhysicalMemory / 1024 / 1024
  492. If RamLeft < 500 And Not IsRamWarned Then
  493. '放在里面是为了防止多次读取导致卡顿
  494. If RamLeft < ReadReg("SystemWarn", "100") Then
  495. ShowHintWindow("PCL - 内存警告", "电脑内存目前仅剩 " & RamLeft & " M!")
  496. IsRamWarned = True
  497. End If
  498. End If
  499. If IsRamWarned Then
  500. If RamLeft > Val(ReadReg("SystemWarn", "100")) + 400 Then
  501. ShowHintWindow("PCL - 内存提示", "电脑内存已回升至 " & RamLeft & " M。")
  502. IsRamWarned = False
  503. End If
  504. End If
  505. '发送统计
  506. If IsSendStat Then
  507. Try
  508. Do While SendInvokes.Count > 0
  509. webData.InvokeScript("eval", New Object() {SendInvokes(0)})
  510. SendInvokes.RemoveAt(0)
  511. Loop
  512. Catch ex As Exception
  513. log("[Main] 发送统计数据失败:" & GetStringFromException(ex))
  514. End Try
  515. End If
  516. '刷新 UI 显示的文件组的进度条
  517. For i = 0 To WebGroups.Count - 1
  518. frmDownloadRight.RefreshGroup(WebGroups.Values(i))
  519. Next
  520. Catch ex As Exception
  521. ExShow(ex, "主时钟执行异常")
  522. End Try
  523. End Sub
  524. Private Sub webData_LoadCompleted() Handles webData.LoadCompleted
  525. log("[Main] 统计页面加载完成")
  526. IsSendStat = True
  527. End Sub
  528. End Class