#include #include #include #include #include #include char MainWindow::szClassName[]="MUS File Converter"; char MainWindow::szMenuName[]="MUSMENU"; MainWindow::MainWindow(HINSTANCE hInstance) : mPaintHandler(this,&MainWindow::paintHandler), mDestroyHandler(this,&MainWindow::destroyHandler), mCommandHandler(this,&MainWindow::commandHandler), mMenuSelectHandler(this,&MainWindow::menuSelectHandler), mhInstance(hInstance) { insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); insertHandler(VectorHandler::PaintHandler,&mPaintHandler); insertHandler(VectorHandler::CommandHandler,&mCommandHandler); insertHandler(VectorHandler::MenuSelectHandler,&mMenuSelectHandler); registerClass(); ::CreateWindow(szClassName,szClassName, WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_SIZEBOX|WS_CLIPCHILDREN, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,mhInstance,(LPSTR)this); show(SW_SHOW); update(); } MainWindow::~MainWindow() { removeHandlers(); if((HWND)*this)destroy(); } void MainWindow::registerClass(void)const { WNDCLASS wndClass; if(::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass))return; wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS; wndClass.lpfnWndProc =(WNDPROC)Window::WindowWndProc; wndClass.cbClsExtra =0; wndClass.cbWndExtra =sizeof(MainWindow*); wndClass.hInstance =mhInstance; wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); wndClass.hbrBackground =(HBRUSH)::GetStockObject(WHITE_BRUSH); wndClass.lpszMenuName =szMenuName; wndClass.lpszClassName =szClassName; ::RegisterClass(&wndClass); assert(0!=::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass)); } CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/) { removeHandlers(); ::PostQuitMessage(0); return (CallbackData::ReturnType)0; } CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData) { switch(GET_WM_COMMAND_ID(someCallbackData.wParam(),someCallbackData.lParam())) { case IDM_OPTIONLOAD : handleLoadRequest(); break; case IDM_OPTIONEXIT : destroy(); break; default : break; } return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::menuSelectHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)0; } CallbackData::ReturnType MainWindow::paintHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)0; } void MainWindow::removeHandlers(void) { removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); removeHandler(VectorHandler::PaintHandler,&mPaintHandler); removeHandler(VectorHandler::CommandHandler,&mCommandHandler); removeHandler(VectorHandler::MenuSelectHandler,&mMenuSelectHandler); } void MainWindow::handleLoadRequest(void) { SelectFile selector(*this); String musPathFileName; String midiPathFileName; selector.SetFileSpec(String(STRING_ASTERISKDOTMUS)); if(selector.GetFileName(musPathFileName,String::MaxString)) { midiPathFileName=musPathFileName; midiPathFileName.token("."); midiPathFileName+=".MID"; MUSDlg musDlg(*this,midiPathFileName,musPathFileName); musDlg.performDialog(); } return; }