#include #include #include #include #include #include #include char MainWindow::szClassName[]="Video Capture"; char MainWindow::szMenuName[]="CAPMENU"; MainWindow::MainWindow(HINSTANCE hInstance) : mPaintHandler(this,&MainWindow::paintHandler), mDestroyHandler(this,&MainWindow::destroyHandler), mCommandHandler(this,&MainWindow::commandHandler), mKeyDownHandler(this,&MainWindow::keyDownHandler), mSizeHandler(this,&MainWindow::sizeHandler), mCreateHandler(this,&MainWindow::createHandler), mTimerHandler(this,&MainWindow::timerHandler), mhInstance(hInstance) { insertHandlers(); registerClass(); ::CreateWindow(szClassName,szClassName, WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_DLGFRAME|WS_CLIPCHILDREN|WS_SIZEBOX, CW_USEDEFAULT,CW_USEDEFAULT, DefaultWidth,DefaultHeight, NULL,NULL,mhInstance,(LPSTR)this); mStatusBar=new StatusBarEx(*this,StatusBarID); 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::TimerHandler,&mTimerHandler); } 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::TimerHandler,&mTimerHandler); } void MainWindow::registerClass(void)const { WNDCLASS wndClass; if(::GetClassInfo(mhInstance,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 =mhInstance; wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); wndClass.hbrBackground =(HBRUSH)::GetStockObject(GRAY_BRUSH); wndClass.lpszMenuName =szMenuName; wndClass.lpszClassName =szClassName; ::RegisterClass(&wndClass); assert(0!=::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass)); } CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) { mMainMenu=new PureMenu(::GetMenu(*this)); mMainMenu.disposition(PointerDisposition::Delete); return (CallbackData::ReturnType)FALSE; } 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::keyDownHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::paintHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::timerHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData) { switch(someCallbackData.wmCommandID()) { case FILE_EXIT : close(); destroy(); break; case FILE_OPEN : handleFileOpen(); break; case FILE_CLOSE : handleFileClose(); break; case CAPMENU_OPTIONS_SAVE_FRAMES : handleSaveFrames(); break; case CAPMENU_OPTIONS_PREVIEW : handlePreview(); break; case CAPMENU_OPTIONS_GRABFRAME : mBitmapCapture->grabFrame(); break; case CAPMENU_OPTIONS_GRABFRAMENOSTOP : mBitmapCapture->grabFrameNoStop(); break; case CAPMENU_DIALOGVIDEODISPLAY : mBitmapCapture->dialogVideoDisplay(); break; case CAPMENU_DIALOGVIDEOSOURCE : mBitmapCapture->dialogVideoSource(); break; case CAPMENU_DIALOGVIDEOFORMAT : mBitmapCapture->dialogVideoFormat(); break; case CAPMENU_SETTINGS : handleSettings(); break; } return (CallbackData::ReturnType)FALSE; } void MainWindow::checkDriverOptions(void) { DriverCaps driverCaps; mBitmapCapture->getDriverCaps(driverCaps); if(!driverCaps.hasDlgVideoDisplay())mMainMenu->checkMenuItem(CAPMENU_DIALOGVIDEODISPLAY,MF_BYCOMMAND|MF_GRAYED); else mMainMenu->enableMenuItem(CAPMENU_DIALOGVIDEODISPLAY,PureMenu::ByCommand,PureMenu::ItemEnabled); if(!driverCaps.hasDlgVideoFormat())mMainMenu->checkMenuItem(CAPMENU_DIALOGVIDEOFORMAT,MF_BYCOMMAND|MF_GRAYED); else mMainMenu->enableMenuItem(CAPMENU_DIALOGVIDEOFORMAT,PureMenu::ByCommand,PureMenu::ItemEnabled); if(!driverCaps.hasDlgVideoSource())mMainMenu->checkMenuItem(CAPMENU_DIALOGVIDEOSOURCE,MF_BYCOMMAND|MF_GRAYED); else mMainMenu->enableMenuItem(CAPMENU_DIALOGVIDEOSOURCE,PureMenu::ByCommand,PureMenu::ItemEnabled); } void MainWindow::handleFileOpen(void) { LRESULT driverIndex; SourceDialog sourceDialog(*this); driverIndex=sourceDialog.perform(); if(-1!=driverIndex) { if(mBitmapCapture.isOkay())mBitmapCapture.destroy(); mBitmapCapture=new BmpCap(*this,driverIndex); //,vidReg.getPreviewWidth(),vidReg.getPreviewHeight(),vidReg.getCaptureWidth(),vidReg.getCaptureHeight(),vidReg.getCaptureFile()); mBitmapCapture.disposition(PointerDisposition::Delete); if(!mBitmapCapture->isConnected()){::MessageBox(*this,"Failed to connect to device","Device Connect",MB_ICONSTOP);return;} else { mMainMenu->enableMenuItem(FILE_CLOSE,PureMenu::ByCommand,PureMenu::ItemEnabled); mMainMenu->enableMenuItem(CAPMENU_OPTIONS_SAVE_FRAMES,PureMenu::ByCommand,PureMenu::ItemEnabled); mMainMenu->checkMenuItem(CAPMENU_OPTIONS_SAVE_FRAMES,MF_BYPOSITION|MF_UNCHECKED); mMainMenu->enableMenuItem(CAPMENU_OPTIONS_GRABFRAME,PureMenu::ByCommand,PureMenu::ItemEnabled); mMainMenu->enableMenuItem(CAPMENU_OPTIONS_GRABFRAMENOSTOP,PureMenu::ByCommand,PureMenu::ItemEnabled); mMainMenu->enableMenuItem(CAPMENU_OPTIONS_PREVIEW,PureMenu::ByCommand,PureMenu::ItemEnabled); checkDriverOptions(); } } } void MainWindow::handleFileClose(void) { if(mBitmapCapture.isOkay())mBitmapCapture.destroy(); mMainMenu->enableMenuItem(FILE_CLOSE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed)); mMainMenu->enableMenuItem(CAPMENU_DIALOGVIDEODISPLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed)); mMainMenu->enableMenuItem(CAPMENU_DIALOGVIDEOFORMAT,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed)); mMainMenu->enableMenuItem(CAPMENU_DIALOGVIDEOSOURCE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed)); mMainMenu->enableMenuItem(CAPMENU_OPTIONS_SAVE_FRAMES,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed)); mMainMenu->checkMenuItem(CAPMENU_OPTIONS_SAVE_FRAMES,MF_BYCOMMAND|MF_UNCHECKED); mMainMenu->enableMenuItem(CAPMENU_OPTIONS_GRABFRAME,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed)); mMainMenu->enableMenuItem(CAPMENU_OPTIONS_GRABFRAMENOSTOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed)); mMainMenu->enableMenuItem(CAPMENU_OPTIONS_PREVIEW,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed)); mMainMenu->checkMenuItem(CAPMENU_OPTIONS_PREVIEW,MF_BYCOMMAND|MF_UNCHECKED); } void MainWindow::handleSaveFrames(void) { if(!mBitmapCapture->isConnected())return; if(MF_CHECKED==mMainMenu->getMenuState(CAPMENU_OPTIONS_SAVE_FRAMES,PureMenu::ByCommand)) { mBitmapCapture->saveFrames(false); mMainMenu->checkMenuItem(CAPMENU_OPTIONS_SAVE_FRAMES,MF_BYCOMMAND|MF_UNCHECKED); } else { mBitmapCapture->saveFrames(true); mMainMenu->checkMenuItem(CAPMENU_OPTIONS_SAVE_FRAMES,MF_BYCOMMAND|MF_CHECKED); } } void MainWindow::handlePreview(void) { if(!mBitmapCapture->isConnected())return; if(MF_CHECKED==mMainMenu->getMenuState(CAPMENU_OPTIONS_PREVIEW,PureMenu::ByCommand)) { mMainMenu->checkMenuItem(CAPMENU_OPTIONS_PREVIEW,MF_BYCOMMAND|MF_UNCHECKED); mBitmapCapture->preview(false); } else { VidReg vidReg; mMainMenu->checkMenuItem(CAPMENU_OPTIONS_PREVIEW,MF_BYCOMMAND|MF_CHECKED); mBitmapCapture->setPreviewRate(vidReg.getPreviewRate()); mBitmapCapture->preview(true); } } void MainWindow::handleSettings() { EntryDialog entryDialog(*this); entryDialog.perform(); }