#include #include #include #include #include #include #include #include #include #include #include char MainWindow::szClassName[]="Mixer [v1.00]"; char MainWindow::szMenuName[]="Mixer"; MainWindow::MainWindow(void) : mxBorder(0) { mPaintHandler.setCallback(this,&MainWindow::paintHandler); mDestroyHandler.setCallback(this,&MainWindow::destroyHandler); mCommandHandler.setCallback(this,&MainWindow::commandHandler); mKeyDownHandler.setCallback(this,&MainWindow::keyDownHandler); mSizeHandler.setCallback(this,&MainWindow::sizeHandler); mCreateHandler.setCallback(this,&MainWindow::createHandler); mUserHandler.setCallback(this,&MainWindow::userHandler); mEraseBackgroundHandler.setCallback(this,&MainWindow::eraseBackgroundHandler); insertHandlers(); registerClass(); // ::CreateWindow(szClassName,szClassName,WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_DLGFRAME,CW_USEDEFAULT,CW_USEDEFAULT,InitialWidth,InitialHeight,NULL,NULL,processInstance(),(LPSTR)this); ::CreateWindow(szClassName,szClassName,WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_CLIPCHILDREN|WS_MINIMIZEBOX|WS_CLIPSIBLINGS|WS_DLGFRAME,CW_USEDEFAULT,CW_USEDEFAULT,InitialWidth,InitialHeight,NULL,NULL,processInstance(),(LPSTR)this); mStatusBar=new StatusBar(*this); mStatusBar.disposition(PointerDisposition::Delete); show(SW_SHOW); update(); } MainWindow::~MainWindow() { destroy(); } void MainWindow::insertHandlers(void) { insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); insertHandler(VectorHandler::PaintHandler,&mPaintHandler); insertHandler(VectorHandler::CommandHandler,&mCommandHandler); insertHandler(VectorHandler::SizeHandler,&mSizeHandler); insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); insertHandler(VectorHandler::CreateHandler,&mCreateHandler); insertHandler(VectorHandler::EraseBackgroundHandler,&mEraseBackgroundHandler); insertHandler(VectorHandler::UserHandler,&mUserHandler); } void MainWindow::removeHandlers(void) { removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); removeHandler(VectorHandler::PaintHandler,&mPaintHandler); removeHandler(VectorHandler::CommandHandler,&mCommandHandler); removeHandler(VectorHandler::SizeHandler,&mSizeHandler); removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); removeHandler(VectorHandler::CreateHandler,&mCreateHandler); removeHandler(VectorHandler::EraseBackgroundHandler,&mEraseBackgroundHandler); removeHandler(VectorHandler::UserHandler,&mUserHandler); } void MainWindow::registerClass(void) { HINSTANCE hInstance(processInstance()); WNDCLASS wndClass; if(::GetClassInfo(hInstance,className(),(WNDCLASS FAR*)&wndClass))return; wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; wndClass.cbClsExtra =0; wndClass.cbWndExtra =sizeof(MainWindow*); wndClass.hInstance =hInstance; wndClass.hIcon =::LoadIcon(processInstance(),"MIXER"); wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH); wndClass.lpszMenuName =szMenuName; wndClass.lpszClassName =szClassName; ::RegisterClass(&wndClass); } CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/) { removeHandlers(); ::PostQuitMessage(0); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &someCallbackData) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::eraseBackgroundHandler(CallbackData &someCallbackData) { return (CallbackData::ReturnType)TRUE; } CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData) { switch(someCallbackData.wParam()) { case MIXERMENU_FILE_OPEN : handleFileOpen(); break; case MIXERMENU_FILE_EXIT : sendMessage(WM_CLOSE,0,0L); break; default : break; } return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) { Block stopArray; mxBorder=::GetSystemMetrics(SM_CXDLGFRAME)<<1; mBitmapBkGnd=new ResBitmap("BACKGROUND"); mBitmapBkGnd.disposition(PointerDisposition::Delete); if(!mBitmapBkGnd.isOkay())return (CallbackData::ReturnType)FALSE; mPureDevice=new PureDevice(*this); mPureDevice.disposition(PointerDisposition::Delete); mDIBitmapBkGnd=new DIBitmap(*mPureDevice,*mBitmapBkGnd,*mBitmapBkGnd); mDIBitmapBkGnd.disposition(PointerDisposition::Delete); mMixerScope=new MixerScope(*this,Scope1ID,0,Rect(xBorder,Scope1y,300,130),Font("Times New Roman",10,Font::PitchVariable|Font::FamilySwiss,Font::WeightNormal)); mMixerScope.disposition(PointerDisposition::Delete); mMixerScope->show(SW_SHOW); mMixerScope->update(); mMixerScope->bringWindowToTop(); mChannelControlManager=new ChannelControlManager(*this,Rect(xBorder,140,625,400),110); mChannelControlManager.disposition(PointerDisposition::Delete); mChannelControlManager->show(SW_SHOW); mChannelControlManager->update(); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::paintHandler(CallbackData &someCallbackData) { Rect winRect; if(!mBitmapBkGnd.isOkay())return (CallbackData::ReturnType)FALSE; windowRect(winRect); mDIBitmapBkGnd->copyBits(mBitmapBkGnd->ptrData(),mBitmapBkGnd->imageExtent()); mDIBitmapBkGnd->usePalette(*mPureDevice,TRUE); mDIBitmapBkGnd->stretchBlt(*mPureDevice,Rect(0,0,(winRect.right()-winRect.left())+mxBorder,height()-mStatusBar->statusBarHeight())); mDIBitmapBkGnd->usePalette(*mPureDevice,FALSE); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::userHandler(CallbackData &someCallbackData) { /* switch(someCallbackData.wParam()) { case WM_USER +1 : modifyPayment(); break; } */ return (CallbackData::ReturnType)FALSE; } void MainWindow::handleFileOpen() { OpenDialog openDialog; String strPathFileName; if(!openDialog.getOpenFileName(*this,"*.wav","Open File","*.wav",strPathFileName))return; mMixerScope->setData(WaveForm(strPathFileName)); }