일반적으로 하나의 어플리케이션에는 여러 개의 화면이 있고, 그 화면을 자주 이동해야 될일이 있습니다. 즉 다중 화면이동 메뉴구현이 필요합니다. 이를 구현하기 위한 기본적인 구조를 샘플 프로그램으로 만들어 보았습니다.
아래 소스를 ctrl+C 로 카피한뒤 CUBLOC Studio 에 ctrl+V 로 붙여넣기해서 테스트해보실 수 있습니다.
#include "CT18XX" Ramclear Ct18contrast 150 On Pad Gosub ProcessTouch Dim TX1 As Integer Dim TY1 As Integer Dim CurrentScreen As Byte #define _MAINMENU 0 #define _SUBMENU1 1 #define _SUBMENU2 2 #define _SUBMENU3 3 #define _SUBMENU4 4 MAIN CurrentScreen = _MAINMENU Do If CurrentScreen = _MAINMENU Then Set Onpad Off DisplayTime Set Onpad On Endif Delay 250 Loop ProcessTouch: TX1 = Sys(10) TY1 = Sys(11) Select Case CurrentScreen Case _MAINMENU ProcessMainMenu Case _SUBMENU1 ProcessSubMenu1 Case _SUBMENU2 ProcessSubMenu2 Case _SUBMENU3 ProcessSubMenu3 Case _SUBMENU4 ProcessSubMenu4 End Select Return End Sub ProcessMainMenu() If Menucheck(0,TX1,TY1) = 1 Then FlashMenu 0 CurrentScreen = _SUBMENU1 Cls SUBMENU1 Elseif Menucheck(1,TX1,TY1) = 1 Then FlashMenu 1 CurrentScreen = _SUBMENU2 Cls SUBMENU2 Elseif Menucheck(2,TX1,TY1) = 1 Then FlashMenu 2 CurrentScreen = _SUBMENU3 Cls SUBMENU3 Elseif Menucheck(3,TX1,TY1) = 1 Then FlashMenu 3 CurrentScreen = _SUBMENU4 Cls SUBMENU4 Endif End Sub Sub ProcessSubMenu1() If Menucheck(0,TX1,TY1) = 1 Then FlashMenu 0 Beeper 1 Elseif Menucheck(1,TX1,TY1) = 1 Then FlashMenu 1 CurrentScreen = _MAINMENU Cls MAIN Endif End Sub Sub ProcessSubMenu2() If Menucheck(0,TX1,TY1) = 1 Then FlashMenu 0 Beeper 2 Elseif Menucheck(1,TX1,TY1) = 1 Then FlashMenu 1 CurrentScreen = _MAINMENU Cls MAIN Endif End Sub Sub ProcessSubMenu3() If Menucheck(0,TX1,TY1) = 1 Then FlashMenu 0 Beeper 3 Elseif Menucheck(1,TX1,TY1) = 1 Then FlashMenu 1 CurrentScreen = _MAINMENU Cls MAIN Endif End Sub Sub ProcessSubMenu4() If Menucheck(0,TX1,TY1) = 1 Then FlashMenu 0 Beeper 4 Elseif Menucheck(1,TX1,TY1) = 1 Then FlashMenu 1 CurrentScreen = _MAINMENU Cls MAIN Endif End Sub Sub Beeper(Num As Byte) Dim i As Byte For i = 1 To Num CT18beep 20 Wait 200 Next End Sub Sub FlashMenu(Num As Byte) Menureverse Num Delay 150 Menureverse Num End Sub Sub DisplayTime() Glocate 16,220 Font 0,0 Dprint Dp(Bcd2bin(Rtcread(2)),2,1),_ ":",Dp(Bcd2bin(Rtcread(1)),2,1), _ ":",Dp(Bcd2bin(Rtcread(0)),2,1) End Sub Sub MAIN() Font 6,1 Style 0,0,0 Glocate 96,24 Gprint "Main Menu" Font 0,1 Menuset 0,2,40,96,144,128 Menutitle 0,20,8,"Submenu 1" Menuset 1,2,168,96,280,128 Menutitle 1,24,8,"Submenu 2" Menuset 2,2,40,152,144,184 Menutitle 2,20,8,"Submenu 3" Menuset 3,2,168,152,280,184 Menutitle 3,24,8,"Submenu 4" Linestyle 0 Dotsize 0,0 Color 1 Box 80,16,232,56 Font 4,0 End Sub Sub SUBMENU1() Font 6,1 Style 0,0,0 Glocate 96,24 Gprint "Submenu 1" Linestyle 0 Dotsize 0,0 Color 1 Box 80,16,232,56 Font 2,1 Menuset 0,2,88,88,224,120 Menutitle 0,22,8,"Beep 1 time" Menuset 1,2,0,208,72,239 Menutitle 1,10,7,"<BACK" Font 4,0 End Sub Sub SUBMENU2() Font 6,1 Style 0,0,0 Glocate 96,24 Gprint "Submenu 2" Linestyle 0 Dotsize 0,0 Color 1 Box 80,16,232,56 Font 2,1 Menuset 0,2,88,88,224,120 Menutitle 0,16,8,"Beep 2 times" Menuset 1,2,0,208,72,239 Menutitle 1,10,7,"<BACK" Font 4,0 End Sub Sub SUBMENU3() Font 6,1 Style 0,0,0 Glocate 96,24 Gprint "Submenu 3" Linestyle 0 Dotsize 0,0 Color 1 Box 80,16,232,56 Font 2,1 Menuset 0,2,88,88,224,120 Menutitle 0,16,8,"Beep 3 times" Menuset 1,2,0,208,72,239 Menutitle 1,10,7,"<BACK" Font 4,0 End Sub Sub SUBMENU4() Font 6,1 Style 0,0,0 Glocate 96,24 Gprint "Submenu 4" Linestyle 0 Dotsize 0,0 Color 1 Box 80,16,232,56 Font 2,1 Menuset 0,2,88,88,224,120 Menutitle 0,16,8,"Beep 4 times" Menuset 1,2,0,208,72,239 Menutitle 1,10,7,"<BACK" Font 4,0 End Sub
소스를 보면 CurrentScreen 이라는 전역변수가 큰 역할을 수행합니다. 이 변수는 현재 화면에 표시된 스크린번 호를 저장하고 있습니다. 이 변수에 저장된 값을 참조하면, 현재 어떤 화면이 표시중인지 알수 있습니다.
터치 인터럽트 처리 루틴을 보면 CurrentScreen 의 값을 참조하여, 어떤 처리루틴으로 갈지 분류를 해줍니다. 이 것만 이해하시면, 전체적인 흐름을 파악하실 수 있으실 것입니다.