//Windows процедура
dword   WndProc(dword hWnd,msg,wPar,lPar)
{
char cFile[512];
struct OPENFILENAME fname;
        switch(msg){
                case WM_PAINT:
                IF (PlayBufferYES==TRUE) PlayBuffer();

//                 BeginPaint(hWnd,#ps);
//                 EndPaint(hWnd,#ps);

                 EAX=0;
                 break;

		CASE WM_COMMAND:         //Когда юзер пользует пункты меню
			switch(wPar){



                                 case ID_OPEN:

					cFile[0] = 0;
					fname.lStructSize	=	sizeof(fname);
					fname.hwndOwner		=	hWnd;
					fname.hInstance		=	hInst;
					fname.lpstrFilter="Executables  (*.xm)\x00*.xm\x00";
					fname.lpstrFile		=	#cFile;
					fname.nMaxFile		=	fname.nMaxFileTitle	=	260;
					fname.lpstrTitle="Select file to load XM ...";
					fname.Flags		=	OFN_EXPLORER | OFN_FILEMUSTEXIST|OFN_NONETWORKBUTTON|OFN_PATHMUSTEXIST;
					fname.lpstrCustomFilter	=	fname.nMaxCustFilter	=
					fname.lpstrFileTitle	=	fname.lpstrInitialDir	=
					fname.nFileOffset	=	fname.nFileExtension	=	fname.lpstrDefExt	=
					fname.lCustData		=	fname.lpfnHook		=	fname.lpTemplateName	=	0;
					fname.nFilterIndex	=	1;
					IF (!GetOpenFileNameA(#fname)) return();
					$pushad
                                        //Копирую строку c путем и именем файла #nFile
                                        strcpy(#nFile,#cFile);
                                        //-----------------------
					LoadFile();
					$popad
                                        BREAK;

                                 //Выбираем в меню выход
                                 case ID_EXIT:
					SendMessageA(hWnd,WM_CLOSE,0,0);
                                        BREAK;

				default:
					break;
			}

			EAX=0;
			break;


               case WM_DESTROY:
                     //Если DUH файл не выгружен то выгрузим
                     IF (DUH!=0) {
                                 _duh_end_renderer(0);
                                 _unload_duh(DUH);
                                 DUH=0;
                                 }


                     IF (DSoundYES==TRUE) {
                    //Сообщаем что блокировать буфер не надо
                     PlayBufferYES=FALSE;
                    //Остоновим проигрывание
                    COMETHOD(lpdsbuffer,#IDirectSoundBuffer.Stop);
                    //Удаление буфера
                    COMETHOD(lpdsbuffer,#IDirectSoundBuffer.Release);
                    //Удаление COM DirectSound
                    //!!!Следующий вызов в  отладочном режиме
                    //в дебаге OllyDbg-1-09  ведет к ошибке, не понимаю почему :-(
                    //Если же запустить на выполнение прогу то зависоне не будет
                    COMETHOD(lppDS,#IDirectSound.Release);

                    IF (EAX==0) MessageBoxA(0,"DirectSound RELEASE OK","Exit",0);  //Это для проверки
                                          }


                        PostQuitMessage(0);
                        EAX=0;
                        BREAK;


                default:
                        DefWindowProcA(hWnd,msg,wPar,lPar);
        }

}
