资源描述:
《《月光宝盒》模拟钢琴程序设计详细说明.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、《月光宝盒》模拟钢琴程序设计详细说明1.程序概要本程序利用VB程序设计语言编写,截住了VB中大量的控件来实现,里面涉及到部分API函数,主要是实现模拟钢琴的发音。此外,还注重了界面的动画效果。2.程序系统的结构系统结构由两部分组成第一部分:欢迎界面frmlogin第二部分:主窗体frmmain此外,主窗体下有多种背景可供选择,以下举例说明1.控件介绍frmlogin欢迎界面中主要用到了标签还有定时器,来实现标签的移动和字体变化.并且播放”致爱丽丝”钢琴曲,用到mrciosoftmultimediacontr
2、ol6.0(sp3)这个控件.在此没有用通用对话框或者文件读取的方法,是因为怕外机上没有钢琴曲之类的轻音乐.但回头察看以下,容量大了.主窗体frmmain中,琴键用命令按钮制作而成.右下角为图片按钮.有三个定时器.4.功能介绍琴键用鼠标或键盘均可实现弹奏.键盘上面的三个命令按钮,自左至右功能依次为,“改变窗体形状”“窗体最前端显示”和“视窗体控件透明化(该过程不可逆,点击‘返回初始状态’按钮可基本恢复)”.窗体右侧的按钮“音调调节”可以调节模拟钢琴的音调.“音乐欣赏”可在里面选择自己想听的歌曲.“换肤”可更
3、改背景图片.“换色”可更改背景颜色.恢复原是背景可点击“返回初始化”按钮,因为时间有限“帮助”按钮未写代码.下面图片按钮可推出程序.1.程序漏洞“月光宝盒”主窗体不可最小化,且如果播放一首音乐,虽然可同时弹奏钢琴,但是当让音乐停止后则钢琴不可用.除此之外当按下琴键上面第三个按钮的时候窗体透明,(并使用第一个按钮)窗体不可恢复.“月光宝盒2”中有最小化按钮但是(最好不用),没有写控件随窗体变化而变化的代码.播放一段音乐时,钢琴可用但是音乐将停止,当没有触发钢琴事件的时,音乐又起.2.主要事件执行过程钢琴事件:
4、PrivateSubForm_Load()numDevices=midiOutGetNumDevs()rc=midiOutClose(hmidi)rc=midiOutOpen(hmidi,curDevice,0,0,0)channel=0baseNote=60volume=127PrivateSubForm_KeyUp(KeyCodeAsInteger,ShiftAsInteger)StopNoteNoteFromKey(KeyCode)‘初始化键盘PrivateFunctionNoteFromKey(ke
5、yAsInteger)NoteFromKey=INVALID_NOTESelectCasekeyCasevbKeyZNoteFromKey=0CasevbKeySNoteFromKey=1CasevbKeyXNoteFromKey=2CasevbKeyDNoteFromKey=3CasevbKeyCNoteFromKey=4CasevbKeyVNoteFromKey=5CasevbKeyGNoteFromKey=6CasevbKeyBNoteFromKey=7CasevbKeyHNoteFromKey=8C
6、asevbKeyNNoteFromKey=9CasevbKeyJNoteFromKey=10CasevbKeyMNoteFromKey=11Case188'commaNoteFromKey=12CasevbKeyLNoteFromKey=13Case190'periodNoteFromKey=14Case186'semicolonNoteFromKey=15Case191'forwardslashNoteFromKey=16EndSelectEndsubPrivateSubStopNote(IndexAsI
7、nteger)If(Index=INVALID_NOTE)ThenExitSubEndIfkey(Index).Value=0midimsg=&H80+((baseNote+Index)*&H100)'+channelmidiOutShortMsghmidi,midimsgEndSub接受鼠标或键盘事件在此来接受键盘事件PrivateSubForm_KeyDown(KeyCodeAsInteger,ShiftAsInteger)StartNoteNoteFromKey(KeyCode)“调用NoteFrom
8、Key(KeyCode)PrivateFunctionNoteFromKey(keyAsInteger)NoteFromKey=INVALID_NOTESelectCasekeyCasevbKeyANoteFromKey=0CasevbKeySNoteFromKey=1CasevbKeyDNoteFromKey=2CasevbKeyFNoteFromKey=3CasevbKeyGNoteFromKey=4Case