Пример #1
0
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	char file[512];
	WAVEHDR * pwhOut;
	MMTIME mmt;
	unsigned long * framebuf;

	switch (message) // switch selon le message
	{
		case WM_CREATE:
			SetTimer(hWnd,0,10,NULL);
		break;

		case WM_DROPFILES:
			file[0] = 0;
			DragQueryFile((HDROP)wParam, 0, (char*)file, sizeof(file));
			loadmod(file);
		break;

		case WM_TIMER:
			mmt.wType = TIME_SAMPLES;
			if(waveOutGetPosition(wout,&mmt,sizeof(MMTIME)) == MMSYSERR_NOERROR)
			{
				file[0] = 0;

				if(IsWindowVisible(hWnd) && fg)
				{
					if(mmt.u.sample&NBSTEREO16BITSAMPLES)
					{
						framebuf = fg_generateFrame(fg,&trackbuf_state2,mmt.u.sample&(NBSTEREO16BITSAMPLES-1));
					}
					else
					{
						framebuf = fg_generateFrame(fg,&trackbuf_state1,mmt.u.sample&(NBSTEREO16BITSAMPLES-1));
					}

					updateScreen(hWnd, framebuf, fg->xres,fg->yres);
				}
			}
		break;
		case WM_COMMAND:	//Action sur un menu
			wmId    = LOWORD(wParam);
			wmEvent = HIWORD(wParam);
			switch(wmId)
			{
				case IDI_PLAY:
					waveOutRestart(wout);
				break;
				case IDI_PAUSE:
					waveOutPause(wout);
				break;
				case IDI_EJECT:
					file[0] = 0;
					if(fileselector(hWnd,file,"Load mod file","*.mod","*.mod",0,0))
					{
						loadmod(file);
					}
				break;
				case IDI_INFO:
				break;
				case IDI_FILTER:
				break;
				case IDI_STEREO:
				break;

				case IDI_QUIT:
					PostQuitMessage(0);
				break;

			}
		break;

		case WM_DESTROY:
		break;

		case WM_USER: //Message venant de l'icone de la barre des taches
			switch(lParam)
			{
				case WM_LBUTTONDOWN:
					if(GetFocus() == hWnd)
					{
						ShowWindow(hWnd,SW_HIDE);
					}
					else
					{
						ShowWindow(hWnd,SW_SHOWNORMAL);
						SetFocus(hWnd);
					}
				break;
				case WM_RBUTTONDOWN:
					ListPopup(hWnd);
				break;
			}

		break;

		case WM_USER+1:
		break;

		case WM_CLOSE: //message de fermeture
			ShowWindow(hWnd,SW_HIDE);
		break;

		case WM_MOUSEMOVE:
		break;

		case MM_WOM_OPEN:
		break;

		case MM_WOM_CLOSE:
		break;

		case MM_WOM_DONE:
			pwhOut = (struct wavehdr_tag *)lParam;
		
			if(pwhOut->lpData == (char*)&sndbuffer1)
			{
				trackbuf_state1.nb_of_state = 0;
				hxcmod_fillbuffer(&modloaded,(unsigned short*)pwhOut->lpData, pwhOut->dwBufferLength /4,&trackbuf_state1);
			}
			else
			{
				trackbuf_state2.nb_of_state = 0;
				hxcmod_fillbuffer(&modloaded,(unsigned short*)pwhOut->lpData, pwhOut->dwBufferLength /4,&trackbuf_state2);
			}

			waveOutWrite((HWAVEOUT)wParam,pwhOut,sizeof(WAVEHDR));
			nb_wr_block++;

		break;

		case WM_KEYDOWN:
		break;

		default: // traitement par defaut de l'evenement (gerer par windows)
			return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}
Пример #2
0
////////////////////////////////////////////////////////////////////////// 
//
//  Gestion Boite de dialogue Settings
//  
//////////////////////////////////////////////////////////////////////////
BOOL CALLBACK DialogMainDialog(
						  HWND  hwndDlg,	// handle of dialog box
						  UINT  message,	// message
						  WPARAM  wParam,	// first message parameter
						  LPARAM  lParam 	// second message parameter
						  )
{
	char filename[1024];
	char tempstr[1024];
	char tempstr2[1024];
	int extpos;
	unsigned int j,i;
	static unsigned int txtindex;
	int wmId, wmEvent;

	wmId    = LOWORD(wParam); 
	wmEvent = HIWORD(wParam); 

	switch (message) 
	{
		

	case WM_DROPFILES:
		DragQueryFile((HDROP)wParam, 0, (char*)filename, 1024);
		sprintf(demo->buffertext,"    Loading floppy   ");
		sprintf(demo->bufferfilename,"");
		loadfloppy(filename,0,0);
		break;	

	case WM_CTLCOLORSTATIC:
      // //  NOTE: HANDLE_WM_CTLCOLORSTATIC is defined in <WINDOWSX.H>
		if(
			GetDlgItem(hwndDlg,IDC_EDIT_STATUS)==(HWND)lParam ||
			GetDlgItem(hwndDlg,IDC_SLIDER_TRACKPOS)==(HWND)lParam ||
			GetDlgItem(hwndDlg,IDC_EDIT_TRACKPOS)==(HWND)lParam			
			)
		{
		return FALSE;
		}
      return HANDLE_WM_CTLCOLORSTATIC(hwndDlg, wParam, lParam, Dlg_OnCtlColor);
      break;





	case WM_COMMAND:
		switch (wmId)
		{
			
		case IDC_BUTTON_LOAD:
			
			sprintf(filename,"*.*");
			i=0;
			if(fileselector(hwndDlg,0,0,filename,"Load image file","All disk image types\0*.*\0\0","*.*",0,1))
			{
				sprintf(demo->buffertext,"    Loading floppy   ");
				
				CheckMenuItem(GetMenu(hwndDlg),ID_DRIVE_SHUGARTMODE,MF_UNCHECKED|MF_BYCOMMAND);
				CheckMenuItem(GetMenu(hwndDlg),ID_DRIVE_IBMPCMODE,MF_UNCHECKED| MF_BYCOMMAND);
				sprintf(demo->bufferfilename,"");
				loadfloppy(filename,0,0);
			}
			break;
			
		case IDC_BUTTON_LOADRAW:
			CreateDialog(GetModuleHandle(NULL),(const char*)IDD_RAWFILECONFIG,GetActiveWindow(),&DialogRAWFileSettings);
			break;
			
		case IDC_BUTTON_CREATEFLOPPY:
			CreateDialog(GetModuleHandle(NULL),(const char*)IDD_CREATEFILESYSTEM,GetActiveWindow(),&DialogCreateFileSystem);
			break;
			
		case IDC_BUTTON_CONVERT:
			CreateDialog(GetModuleHandle(NULL),(const char*)IDD_BATCHCONVERT,GetActiveWindow(),&DialogBatchConvert);
			break;
			
		case IDC_BUTTON_SETTINGS:
			CreateDialog(GetModuleHandle(NULL),(const char*)IDD_DIALOG_CONFIG,GetActiveWindow(),&DialogSettings);
			break;
			
		case IDC_BUTTON_USBCONFIG:
			CreateDialog(GetModuleHandle(NULL),(const char*)IDD_DIALOG_STATS,GetActiveWindow(),&DialogStats);
			break;

		case IDC_BUTTON_FLOPPYDUMP:
			CreateDialog(GetModuleHandle(NULL),(const char*)IDD_DIALOG_FLOPPYDUMP,GetActiveWindow(),&DialogFloppyDump);
			break;

		case IDC_BUTTON_EXPORT:
			if(thefloppydisk)
			{
				sprintf(filename,"%s",demo->bufferfilename);
				i=0;
				while(filename[i]!=0)
				{
					if(filename[i]=='.')filename[i]='_';
					i++;
				}
				//strcat(filename,".mfm");
				if(fileselector(hwndDlg,1,0,filename,"Export disk/Save As",
					"HFE file (SDCard HxC Floppy Emulator file format)\0*.hfe\0VTR file (VTrucco Floppy Emulator file format)\0*.vtr\0MFM file (MFM/FM track file format)\0*.mfm\0AFI file (Advanced File image format)\0*.afi\0IMG file (RAW Sector file format)\0*.img\0CPC DSK file\0*.dsk\0IMD file\0*.imd\0\0",
					"*.hfe",&extpos,3)
					)
				{
					switch(extpos)
					{
					case 1:
						write_HFE_file(flopemu,thefloppydisk,filename,hwif->interface_mode,hwif->double_step);
						break;
						
					case 2:
						write_vtrucco_file(flopemu,thefloppydisk,filename,hwif->interface_mode);
						break;
						
					case 3:
						write_MFM_file(flopemu,thefloppydisk,filename);
						break;
						
					case 4:
						write_AFI_file(flopemu,thefloppydisk,filename);
						break;
						
					case 5:
						write_RAW_file(flopemu,thefloppydisk,filename);
						break;
				
					case 6:
						write_CPCDSK_file(flopemu,thefloppydisk,filename);
						break;

					case 7:
						write_IMD_file(flopemu,thefloppydisk,filename);
						break;


					}
				}
			}
			else
			{
				MessageBox(hwndDlg,"No floppy loaded !\nPlease drag and drop your disk file into the window","Error",MB_OK|MB_ICONHAND);
			}
			break;
			
			break;
			
		default:;
			break;
		}
		
		break;
		
		
		
		case WM_INITDIALOG:			
			txtindex=0;
			SetDlgItemText(hwndDlg,IDC_EDIT_STATUS,"No disk loaded.");
			SetTimer(hwndDlg,36,100,NULL);

			changefond(hwndDlg,IDC_EDIT_STATUS);
			changefond(hwndDlg,IDC_EDIT_TRACKPOS);
			changefond(hwndDlg,IDC_STATIC_MAIN01);
			changefond(hwndDlg,IDC_STATIC_MAIN02);
			changefond(hwndDlg,IDC_STATIC_MAIN03);
			changefond(hwndDlg,IDC_STATIC_MAIN04);
			changefond(hwndDlg,IDC_STATIC_MAIN05);
			changefond(hwndDlg,IDC_STATIC_MAIN06);
			changefond(hwndDlg,IDC_STATIC_MAIN07);
			changefond(hwndDlg,IDC_STATIC_MAIN08);

			/*
			changefond(hwndDlg,IDC_BUTTON_LOAD);
			changefond(hwndDlg,IDC_BUTTON_LOADRAW);
			changefond(hwndDlg,IDC_BUTTON_CONVERT);
			changefond(hwndDlg,IDC_BUTTON_CREATEFLOPPY);
			changefond(hwndDlg,IDC_BUTTON_EXPORT);
			changefond(hwndDlg,IDC_BUTTON_SDCONFIG);
			changefond(hwndDlg,IDC_BUTTON_USBCONFIG);*/
			break;
			
		case WM_CLOSE:
			DestroyWindow(hwndDlg);
			break;
			
		case WM_TIMER:
			if(strlen(demo->bufferfilename))
			{
				sprintf(tempstr,"%s - %d track(s) %d side(s)     ",demo->bufferfilename,thefloppydisk->floppyNumberOfTrack,thefloppydisk->floppyNumberOfSide);
				if(txtindex>=strlen(tempstr))txtindex=0;
				
				i=0;
				j=txtindex;
				do
				{
					tempstr2[i]=tempstr[j];
					i++;
					j++;
					if(j>=strlen(tempstr)) j=0;
				}while(i<strlen(tempstr));
				tempstr2[i]=0;
				memcpy(&tempstr2[i],tempstr2,strlen(tempstr2));
				
				SetDlgItemText(hwndDlg,IDC_EDIT_STATUS,tempstr2);
				
				txtindex++;
			}
			else
			{
				if(demo->loadstatus!=LOADER_NOERROR)
				{
					switch(demo->loadstatus)
					{
					case LOADER_UNSUPPORTEDFILE:
						SetDlgItemText(hwndDlg,IDC_EDIT_STATUS,"Load error! Image file not supported!");
						break;
					case LOADER_FILECORRUPT:
						SetDlgItemText(hwndDlg,IDC_EDIT_STATUS,"Load error! File corrupted/Read error ?");
						break;
					case LOADER_ACCESSERROR:
						SetDlgItemText(hwndDlg,IDC_EDIT_STATUS,"Load error! Read file error!");
						break;
					default:
						sprintf(tempstr2,"Load error! error %d",demo->loadstatus);
						SetDlgItemText(hwndDlg,IDC_EDIT_STATUS,tempstr2);
						break;
					}
				}
			}
			
			if(thefloppydisk)
			{
				if(hwif)
				{
					sprintf(tempstr,"Track %d/%d",hwif->current_track,thefloppydisk->floppyNumberOfTrack);
					SetDlgItemText(hwndDlg,IDC_EDIT_TRACKPOS,tempstr);
					
					SendDlgItemMessage(hwndDlg,IDC_SLIDER_TRACKPOS, TBM_SETRANGE, TRUE, MAKELONG(0, thefloppydisk->floppyNumberOfTrack));
					SendDlgItemMessage(hwndDlg,IDC_SLIDER_TRACKPOS, TBM_SETPOS, TRUE,(int)hwif->current_track);
				}
			}
			break;
			
			
		default:
			return FALSE;
			
	}
	
	return TRUE;
}