www.pudn.com > gate.rar > Command.asm


		mov eax,wParam 
		shr eax,16 
		movzx ecx,ax 
		mov eax,wParam 
		and eax,0FFFFh 
	.if (eax==97) 
		invoke SendMessage,hWin,WM_COMMAND,99,242 
	.elseif (eax==95) 
		.if PlayMode==TRUE 
			invoke LoadString,hInstance,9,addr TempBuff,sizeof TempBuff 
			invoke SetDlgItemText,hWin,1001,addr TempBuff 
		.else 
			invoke SendMessage,hWin,WM_COMMAND,99,0 
		.endif 
	.elseif (eax==99) 
		cmp lParam,0 
		jz @SkipTest ;如果是添加新的东东则跳过播放模式检测 
		.if PlayMode==TRUE 
			mov CurrentTrack,1 
			invoke SendMessage,hWin,WM_COMMAND,102,lParam ;在继续播放之前先关闭驱动器 
			lea eax,OpenCD 
			invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin 
			.if DoorMode==FALSE 
				lea eax,OpenDoor 
				invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin 
				mov DoorMode,TRUE  
			.else 
				lea eax,CloseDoor 
				invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin 
				mov DoorMode,FALSE 
				invoke SendMessage,hWin,WM_COMMAND,100,0 
				ret 
			.endif 
			invoke SendMessage,hWin,WM_COMMAND,102,lParam ;在继续播放之前先关闭驱动器 
			ret 
		.endif 
		;--------------------------------------- 
		@SkipTest: 
		;浏览文件,在每次打开打开文件对话框时清除保存的文件路径缓存 
		lea edi,Buffer 
		mov ecx,sizeof Buffer 
		mov al,0 
		rep stosb 
		;打开文件 
		lea eax,FileFilter 
		mov ofn.lpstrFilter,eax 
		invoke LoadString,hInstance,11,offset TempBuffer,sizeof TempBuffer 
		mov ofn.lpstrTitle,offset TempBuffer 
		mov ofn.lpstrFile,offset Buffer 
		mov ofn.nMaxFile,sizeof Buffer 
		invoke GetOpenFileName,offset ofn 
		.if (eax!=0) 
			.if (lParam!=0) 
				invoke SendMessage,hWin,WM_COMMAND,201,0 
				mov TempNum,0 
			.else 
				invoke SendMessage,hList1,LB_GETCOUNT,0,0 
				mov TempNum,eax 
			.endif 
			;把选择的文件加入到播放列表中。 
			invoke lstrlen,offset Buffer  
			movsx ecx,ofn.nFileOffset 
			cmp eax,ecx 
			jae OneOnly ;如果第一个文件在路径内表示只选择了一个文件,跳过 
 
			;准备开始循环读取所有选择的文件 
				lea esi,Buffer 
				movsx eax,ofn.nFileOffset 
				add esi,eax ;把指针移到第一个文件开始处 
				lea edi,Buffer1 
				;GO! 
			@@: 
				lodsb 
				stosb 
				cmp al,0 
				jnz @B ;如果不为0则表示第一个文件尚未读出 
				;处理后增加到列表中 
				invoke wsprintf,offset TempBuffer,offset tempstr,TempNum,offset Buffer1 
				invoke SendMessage,hList,LB_ADDSTRING,0,offset TempBuffer 
				invoke lstrcpy,offset MciResult,offset Buffer 
				invoke lstrlen,offset Buffer 
				cmp eax,3 
				je NotFirst 
					invoke lstrcat,offset MciResult,offset PathStr 
				NotFirst: 
 
				invoke lstrcat,offset MciResult,offset Buffer1 
				invoke GetShortPathName,offset MciResult,offset Buffer1,sizeof Buffer1 
				invoke SendMessage,hList1,LB_ADDSTRING,0,offset Buffer1 
				mov ecx,esi 
				mov al,[ecx+1] 
				cmp al,0 
				jz Done	;如果0后仍然为0则表示已经结束 
				lea edi,Buffer1 
				inc TempNum 
				jmp @B 
			OneOnly: 
				;只选择了一个文件 
				invoke GetFileTitle,offset Buffer,offset Buffer1,MAX_PATH 
				invoke wsprintf,offset TempBuffer,offset tempstr,TempNum,offset Buffer1 
				invoke SendMessage,hList,LB_ADDSTRING,0,offset TempBuffer 
				invoke GetShortPathName,offset Buffer,offset Buffer1,sizeof Buffer1 
				invoke SendMessage,hList1,LB_ADDSTRING,0,offset Buffer1 
			Done: 
				invoke SendMessage,hList1,LB_GETCOUNT,0,0 
				sub eax,1 
				invoke SendMessage,hScroll,TBM_SETRANGEMAX,TRUE,eax 
				cmp lParam,0 
				jz @F 
					invoke SendMessage,hWnd,WM_COMMAND,100,0 
				@@: 
		.endif 
				invoke LoadString,hInstance,11,addr TempBuff,sizeof TempBuff 
				invoke SetDlgItemText,hWin,1001,addr TempBuff 
	.elseif (eax==100) 
		include play.asm 
	.elseif (eax==101) 
		;暂停、继续 
		mov eax,PauseState 
		.if (eax==FALSE) 
			.if Mp3State==0 
				ret 
			.endif 
			invoke KillTimer,hWin,100 
			.if PlayMode==TRUE ;是播放CD 
				lea eax,PauseCD 
				invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin 
			.else 
				lea eax,PauseMp3 
				invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin 
			.endif 
			mov PauseState,TRUE  
 
			invoke LoadString,hInstance,4,addr TempBuff,sizeof TempBuff 
			invoke ModifyMenu,hMenu,101,MF_BYCOMMAND,101,addr TempBuff 
 
			invoke GetDlgItem,hWin,11 
			invoke SendMessage,eax,STM_SETIMAGE,IMAGE_BITMAP,hPauseBitmap2 
			mov Mp3State,2 
			invoke LoadString,hInstance,3,addr TempBuff,sizeof TempBuff 
			invoke SetDlgItemText,hWin,1001,addr TempBuff 
		.else 
			invoke SetTimer,hWin,100,1000,offset TimeEventProc 
			.if PlayMode==TRUE 
				lea eax,ResumeCD 
				invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin 
			.else 
				lea eax,PlayMp3 
				invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin 
			.endif 
			mov PauseState,FALSE 
 
			invoke LoadString,hInstance,2,addr TempBuff,sizeof TempBuff 
			invoke ModifyMenu,hMenu,101,MF_BYCOMMAND,101,addr TempBuff 
 
			invoke GetDlgItem,hWin,11 
			invoke SendMessage,eax,STM_SETIMAGE,IMAGE_BITMAP,hPauseBitmap 
			.if PlayMode==TRUE  
				lea eax,PlayCDStr 
				invoke wsprintf,offset Buffer,eax,CurrentTrack 
				invoke SetDlgItemText,hWin,1001,offset Buffer 
			.else 
				invoke SetDlgItemText,hWin,1001,offset Buffer1 
			.endif 
			mov Mp3State,1 
		.endif 
		invoke GetDlgItem,hWnd,9 
		invoke InvalidateRect,eax,NULL,TRUE 
	.elseif (eax==102) 
			.if Mp3State==0 
				ret 
			.endif 
		invoke KillTimer,hWin,100 
		;清除全局缓存 
		lea edi,TimeBuffer 
		mov ecx,sizeof TimeBuffer 
		mov al,0 
		rep stosb 
		lea edi,TempBuffer 
		mov ecx,sizeof TempBuffer 
		mov al,0 
		rep stosb 
		lea edi,SecondSongWord 
		mov ecx,sizeof SecondSongWord 
		mov al,0 
		rep stosb 
		lea edi,SongWordFile 
		mov ecx,sizeof SongWordFile 
		mov al,0 
		rep stosb 
		lea edi,CurrFileName 
		mov ecx,sizeof CurrFileName 
		mov al,0 
		rep stosb 
		invoke wsprintf,offset TimeBuffer,offset TimeShow,offset ZeroStr,0,offset ZeroStr,0 
		;停止播放 
		.if PlayMode==TRUE 
			lea eax,StopCD 
			invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin 
		.endif 
		lea eax,CloseAll 
		invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin 
		mov PauseState,TRUE 
		invoke SendMessage,hWin,WM_COMMAND,101,lParam 
 
		invoke LoadString,hInstance,1,addr TempBuff,sizeof TempBuff 
		invoke SetDlgItemText,hWin,1001,addr TempBuff 
		invoke GetDlgItem,hWin,11 
		push eax 
		invoke EnableWindow,eax,FALSE 
		pop eax 
		invoke SendMessage,eax,STM_SETIMAGE,IMAGE_BITMAP,hPauseBitmap1 
 
		invoke GetDlgItem,hWin,12 
		push eax 
		invoke EnableWindow,eax,FALSE 
		pop eax 
		invoke SendMessage,eax,STM_SETIMAGE,IMAGE_BITMAP,hStopBitmap1 
 
		invoke EnableMenuItem,hMenu,101,MF_BYCOMMAND or MF_GRAYED 
		invoke EnableMenuItem,hMenu,102,MF_BYCOMMAND or MF_GRAYED 
		invoke SendMessage,hTrack,TBM_SETPOS,TRUE,0 
		mov Mp3State,0 
 
		mov ExistFile,FALSE 
		invoke GetDlgItem,hWnd,1009 
		invoke InvalidateRect,eax,NULL,TRUE 
 
		invoke SendMessage,hTrack,TBM_SETRANGEMAX,TRUE,0 
		invoke GetDlgItem,hWnd,9 
		invoke InvalidateRect,eax,NULL,TRUE 
	.elseif (eax==103) ;是否随机播放 
		invoke GetMenuState,hMenu,103,MF_BYCOMMAND 
		.if eax==MF_CHECKED 
			invoke CheckMenuItem,hMenu,103,MF_BYCOMMAND or MF_UNCHECKED 
			invoke GetDlgItem,hWnd,18 
			invoke SendMessage,eax,STM_SETIMAGE,IMAGE_BITMAP,hLoopBitmap 
		.else 
			invoke CheckMenuItem,hMenu,103,MF_BYCOMMAND or MF_CHECKED 
			invoke GetDlgItem,hWnd,18 
			invoke SendMessage,eax,STM_SETIMAGE,IMAGE_BITMAP,hLoopBitmap1 
		.endif 
	.elseif (eax==107) 
		invoke GetMenuState,hMenu,107,MF_BYCOMMAND 
		.if eax==MF_CHECKED 
			invoke CheckMenuItem,hMenu,107,MF_BYCOMMAND or MF_UNCHECKED 
			invoke GetDlgItem,hWnd,17 
			invoke SendMessage,eax,STM_SETIMAGE,IMAGE_BITMAP,hSkipBitmap 
		.else 
			invoke GetDlgItem,hWnd,17 
			invoke SendMessage,eax,STM_SETIMAGE,IMAGE_BITMAP,hSkipBitmap1 
			invoke CheckMenuItem,hMenu,107,MF_BYCOMMAND or MF_CHECKED 
		.endif 
	.elseif (eax==108) 
		invoke SendMessage,hTrack,TBM_GETPOS,0,0 
		sub eax,5000 
		invoke SendMessage,hTrack,TBM_SETPOS,TRUE,eax 
		invoke SendMessage,hTrack,WM_LBUTTONUP,0,0 
	.elseif (eax==109) 
		invoke SendMessage,hTrack,TBM_GETPOS,0,0 
		add eax,5000 
		invoke SendMessage,hTrack,TBM_SETPOS,TRUE,eax 
		invoke SendMessage,hTrack,WM_LBUTTONUP,0,0 
	.elseif (eax==104) 
		invoke SendMessage,hWin,MM_MCINOTIFY,MCI_NOTIFY_SUCCESSFUL,0 
	.elseif (eax==105) 
		invoke SendMessage,hWin,MM_MCINOTIFY,MCI_NOTIFY_SUCCESSFUL,1 
	.elseif (eax==200) 
		;删除选择的项目 
		;初始化 
		invoke SendMessage,hList,LB_GETSELCOUNT,0,0 
		mov TempNum,eax 
		mov Num,0 
		mov Index,-1 
		;开始 
		@@: 
			invoke SendMessage,hList,LB_GETSELITEMS,1,addr Index ;一次读取一条 
			invoke SendMessage,hList,LB_DELETESTRING,Index,0 
			invoke SendMessage,hList1,LB_DELETESTRING,Index,0 
			inc Num 
			mov eax,Num 
		cmp eax,TempNum 
		jl @B ;如果小于继续删除下一条 
		invoke SendMessage,hList1,LB_GETCOUNT,0,0 
		sub eax,1 
		invoke SendMessage,hScroll,TBM_SETRANGEMAX,TRUE,eax 
	.elseif (eax==201) 
		;全部删除 
		invoke SendMessage,hList,LB_RESETCONTENT,0,0 
		invoke SendMessage,hList1,LB_RESETCONTENT,0,0 
		invoke SendMessage,hScroll,TBM_SETRANGEMAX,TRUE,0 
	.elseif (eax==300) 
		;关于 
		mov eax,offset AboutDlgProc 
		invoke DialogBoxParam,hInstance,103,hWnd,eax,0 
	.elseif (eax==301) 
		;设置 
		mov eax,offset SettingDlgProc 
		invoke DialogBoxParam,hInstance,106,hWnd,eax,0 
	.elseif (eax==106) 
		;退出 
		invoke SendMessage,hWin,WM_CLOSE,0,0 
	.elseif (eax==5 && ecx==LBN_DBLCLK) ;如果在列表框上双击 
			invoke SendMessage,hList,LB_GETCURSEL,0,0 
			invoke SendMessage,hList1,LB_SETCARETINDEX,eax,TRUE 
 
		.if PlayMode==TRUE 
			invoke SendMessage,hList,LB_GETCURSEL,0,0 
			add eax,1 
			mov CurrentTrack,eax 
		.endif 
			invoke SendMessage,hWin,WM_COMMAND,100,0 
	.elseif (eax==202) ;重新载入列表 
		cmp PlayMode,TRUE 
		jnz @F 
			ret 
		@@: 
		invoke SendMessage,hWin,WM_COMMAND,201,0 
		push 1111 
		push hWin 
		call LoadList 
	.elseif (eax==110) 
		invoke SendMessage,hWin,WM_COMMAND,102,0 
		.if PlayMode==TRUE 
			mov PlayMode,FALSE 
			invoke SendMessage,hWin,WM_COMMAND,202,0 
			invoke GetDlgItem,hWin,22 
			INVOKE EnableWindow,eax,TRUE 
		.else 
			invoke GetDlgItem,hWin,22 
			INVOKE EnableWindow,eax,FALSE 
			mov PlayMode,TRUE  
			invoke SendMessage,hWin,WM_COMMAND,201,0 
			lea eax,OpenCD 
			invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin 
			lea eax,GetTrack 
			invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin 
			invoke StrToDword,offset MciResult 
			cmp eax,0 
			jz NotCD 
			mov TempNum,eax 
 
			invoke SendMessage,hScroll,TBM_SETRANGEMAX,TRUE,eax 
 
			mov Index,1 
			@@: 
				invoke wsprintf,offset Buffer,offset CDAudioName,Index 
				invoke SendMessage,hList,LB_ADDSTRING,0,offset Buffer 
				inc Index 
				mov eax,Index 
				cmp eax,TempNum 
			jbe @B 
			NotCD: 
				cmp lParam,10001 
				jnz @F 
					ret 
				@@: 
		.endif 
		invoke SendMessage,hWin,WM_COMMAND,102,0 
	.endif