#include #include #include #include char MUSDlg::szClassName[]={"MUSConverter"}; char MUSDlg::szMenuName[]={""}; MUSDlg::MUSDlg(Window &parentWindow,String midiPathFileName,String musPathFileName) : MUSConverter(midiPathFileName,musPathFileName), mCommandHandler(this,&MUSDlg::commandHandler), mCreateHandler(this,&MUSDlg::createHandler), mDrawItemHandler(this,&MUSDlg::drawItemHandler), mPaintHandler(this,&MUSDlg::paintHandler), mDestroyHandler(this,&MUSDlg::destroyHandler), mCloseHandler(this,&MUSDlg::closeHandler), mControlColorHandler(this,&MUSDlg::controlColorHandler), mParentWindow(parentWindow), mlpLedTrackDisplay(0), mlpLedTempoDisplay(0), mOwnerDraw(OwnerDraw::UseInstance), mhButtonCvtWnd(0), mhButtonUpWnd(0), mhGrayBrush(::CreateSolidBrush(RGB(btnRed,btnGreen,btnBlue))), mhButtonDnWnd(0), mhListBoxWnd(0), mhStaticWnd(0), mLinkedBitmap(0,String("WND"),parentWindow.processInstance()), mOutputPathFileName(midiPathFileName) { registerClass(); insertHandlers(); } MUSDlg::~MUSDlg() { if(mlpLedTrackDisplay){delete mlpLedTrackDisplay;mlpLedTrackDisplay=0;} if(mlpLedTempoDisplay){delete mlpLedTempoDisplay;mlpLedTempoDisplay=0;} if(::IsWindow(mhButtonUpWnd))::DestroyWindow(mhButtonUpWnd); if(::IsWindow(mhButtonDnWnd))::DestroyWindow(mhButtonDnWnd); if(::IsWindow(mhButtonCvtWnd))::DestroyWindow(mhButtonCvtWnd); if(::IsWindow(mhListBoxWnd))::DestroyWindow(mhListBoxWnd); if(::IsWindow(mhStaticWnd))::DestroyWindow(mhStaticWnd); if(mhGrayBrush)::DeleteObject(mhGrayBrush); if((HWND)*this)destroy(); removeHandlers(); } void MUSDlg::registerClass(void)const { WNDCLASS wndClass; if(::GetClassInfo(mParentWindow.processInstance(),szClassName,(WNDCLASS FAR*)&wndClass))return; wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS; wndClass.lpfnWndProc =(WNDPROC)Window::WindowWndProc; wndClass.cbClsExtra =0; wndClass.cbWndExtra =sizeof(MUSDlg*); wndClass.hInstance =mParentWindow.processInstance(); wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); wndClass.hbrBackground =(HBRUSH)::GetStockObject(LTGRAY_BRUSH); wndClass.lpszMenuName =szMenuName; wndClass.lpszClassName =szClassName; ::RegisterClass(&wndClass); assert(0!=::GetClassInfo(mParentWindow.processInstance(),szClassName,(WNDCLASS FAR*)&wndClass)); } WORD MUSDlg::performDialog(void) { createDialogControls(); loadInstruments(); while(::IsWindow((HWND)*this))yieldTask(); return FALSE; } void MUSDlg::loadInstruments(void) { Instruments midiInstruments(StartOrdinal,EndOrdinal); PureVector vectoredInstruments; String itemString; midiInstruments.getInstruments(vectoredInstruments); ::SendMessage(mhListBoxWnd,WM_SETREDRAW,FALSE,0L); for(int index=0;indexsetNumber(getTempo()); } void MUSDlg::handleTempoDnEvent(void) { setTempo(getTempo()-1); mlpLedTempoDisplay->setNumber(getTempo()); } void MUSDlg::handleConvertFileEvent(void) { String convertMessageString("writing "); convertMessageString+=mOutputPathFileName; setMessage(convertMessageString); if(!convertFile())setMessage("Error converting file..."); else setMessage("Complete..."); } CallbackData::ReturnType MUSDlg::createHandler(CallbackData &/*someCallbackData*/) { mOwnerDraw.associate(MUS_TEMPOBUTTONUP,String(STRING_BITMAPUPARUP),String(STRING_BITMAPUPARUP),String(STRING_BITMAPUPARDN),OwnerDraw::NOFOCUS); mOwnerDraw.associate(MUS_TEMPOBUTTONDN,String(STRING_BITMAPDNARUP),String(STRING_BITMAPDNARUP),String(STRING_BITMAPDNARDN),OwnerDraw::NOFOCUS); mOwnerDraw.associate(MUS_CVTBUTTON,String(STRING_BITMAPCNVTUP),String(STRING_BITMAPCNVTUP),String(STRING_BITMAPCNVTDN),OwnerDraw::NOFOCUS); mlpLedTrackDisplay=new LedDisplay(*this,Point(xTrack,yTrack)); mlpLedTempoDisplay=new LedDisplay(*this,Point(xTempo,yTempo)); mlpLedTempoDisplay->setNumber(getTempo()); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MUSDlg::destroyHandler(CallbackData &/*someCallbackData*/) { mOwnerDraw.freeBitmap(MUS_TEMPOBUTTONUP); mOwnerDraw.freeBitmap(MUS_TEMPOBUTTONDN); mOwnerDraw.freeBitmap(MUS_CVTBUTTON); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MUSDlg::closeHandler(CallbackData &/*someCallbackData*/) { destroy(); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MUSDlg::controlColorHandler(CallbackData &someCallbackData) { ::SetBkColor((HDC)someCallbackData.wParam(),RGB(btnRed,btnGreen,btnBlue)); return (CallbackData::ReturnType)mhGrayBrush; } CallbackData::ReturnType MUSDlg::drawItemHandler(CallbackData &someCallbackData) { if(MUS_TEMPOBUTTONUP==((LPDRAWITEMSTRUCT)someCallbackData.lParam())->CtlID) mOwnerDraw.handleOwnerButton(MUS_TEMPOBUTTONUP,someCallbackData.lParam()); else if(MUS_TEMPOBUTTONDN==((LPDRAWITEMSTRUCT)someCallbackData.lParam())->CtlID) mOwnerDraw.handleOwnerButton(MUS_TEMPOBUTTONDN,someCallbackData.lParam()); else if(MUS_CVTBUTTON==((LPDRAWITEMSTRUCT)someCallbackData.lParam())->CtlID) mOwnerDraw.handleOwnerButton(MUS_CVTBUTTON,someCallbackData.lParam()); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MUSDlg::paintHandler(CallbackData &someCallbackData) { RECT windowRect; PaintInformation *lpPaintInformation((PaintInformation*)someCallbackData.lParam()); ::SetRect(&windowRect,0,0,mLinkedBitmap.width(),mLinkedBitmap.height()+CaptionHeight); mLinkedBitmap.drawBitmap((PureDevice)(*lpPaintInformation),windowRect); if(mlpLedTrackDisplay)mlpLedTrackDisplay->paint(); if(mlpLedTempoDisplay)mlpLedTempoDisplay->paint(); return (CallbackData::ReturnType)0; } void MUSDlg::yieldTask(void)const { MSG msg; while(::IsWindow((HWND)*this)&&::PeekMessage(&msg,0,0,0,PM_REMOVE)) {::TranslateMessage(&msg);::DispatchMessage(&msg);} } WORD MUSDlg::handleScoreStart(void) { return MUSConverter::handleScoreStart(); } WORD MUSDlg::handleReleaseNote(PureEvent &pureEvent,PureDelay &pureDelay,PureNote &releaseNote,BYTE trackNumber) { if(trackNumber!=mlpLedTrackDisplay->getNumber()) mlpLedTrackDisplay->setNumber(trackNumber); return MUSConverter::handleReleaseNote(pureEvent,pureDelay,releaseNote,trackNumber); } WORD MUSDlg::handlePlayNote(PureEvent &pureEvent,PureDelay &pureDelay,PureNote &playNote,BYTE trackNumber) { if(trackNumber!=mlpLedTrackDisplay->getNumber()) mlpLedTrackDisplay->setNumber(trackNumber); return MUSConverter::handlePlayNote(pureEvent,pureDelay,playNote,trackNumber); } WORD MUSDlg::handlePitchBend(PureEvent &pureEvent,PureDelay &pureDelay,BYTE pitchBenderValue,BYTE trackNumber) { if(trackNumber!=mlpLedTrackDisplay->getNumber()) mlpLedTrackDisplay->setNumber(trackNumber); return MUSConverter::handlePitchBend(pureEvent,pureDelay,pitchBenderValue,trackNumber); } WORD MUSDlg::handleReset(PureEvent &pureEvent,PureDelay &pureDelay,BYTE tempoValue,BYTE trackNumber) { if(trackNumber!=mlpLedTrackDisplay->getNumber()) mlpLedTrackDisplay->setNumber(trackNumber); return MUSConverter::handleReset(pureEvent,pureDelay,tempoValue,trackNumber); } WORD MUSDlg::handleController(PureEvent &pureEvent,PureDelay &pureDelay,PureController &pureController,BYTE trackNumber) { if(trackNumber!=mlpLedTrackDisplay->getNumber()) mlpLedTrackDisplay->setNumber(trackNumber); return MUSConverter::handleController(pureEvent,pureDelay,pureController,trackNumber); } WORD MUSDlg::handleScoreEnd(PureDelay &pureDelay) { return MUSConverter::handleScoreEnd(pureDelay); }