#include #include #include char MainWindow::szClassName[]="Tester"; char MainWindow::szMenuName[]="mainMenu"; MainWindow::MainWindow(HINSTANCE hInstance) : mhInstance(hInstance) { 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); mTimerHandler.setCallback(this,&MainWindow::timerHandler); mSetFocusHandler.setCallback(this,&MainWindow::setFocusHandler); mCloseHandler.setCallback(this,&MainWindow::closeHandler); insertHandlers(); registerClass(); ::CreateWindow(szClassName,szClassName, WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_DLGFRAME|WS_CLIPCHILDREN, CW_USEDEFAULT,CW_USEDEFAULT, InitialWidth,InitialHeight, NULL,NULL,mhInstance,(LPSTR)this); 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); insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); } 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); removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); } 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(WHITE_BRUSH); wndClass.lpszMenuName =szMenuName; wndClass.lpszClassName =szClassName; ::RegisterClass(&wndClass); assert(0!=::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass)); } CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) { mStatusBar=new StatusBarEx(*this,101); mStatusBar.disposition(PointerDisposition::Delete); mControlWnd=::new Control(::CreateWindow("STATIC","TEST",WS_POPUP,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,::GetFocus(),0,::GetModuleHandle(0),0),101); mControlWnd.disposition(PointerDisposition::Delete); mControlWnd->show(SW_SHOW); // mTwain=new Twain(); // mTwain.disposition(PointerDisposition::Delete); // setDefWindow((GUIWindow*)this); setDefWindow(&(*mControlWnd)); // setDefWindow((GUIWindow*)this); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::closeHandler(CallbackData &someCallbackData) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::paintHandler(CallbackData &someCallbackData) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/) { removeHandlers(); ::PostQuitMessage(0); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData) { switch(someCallbackData.wParam()) { case SOURCE_SELECT : // userSelectSource(); // selectSource(); if(!twainAvailable())return message("twain not available",false); if(!openSourceManager())return message("open source failed",false); setShowUI(false); // if(!openSource(1))return message("open default source failed",false); if(!openDefaultSource())return message("open default source failed",false); if(!modalAcquire())return message("modal acquire failed",false); break; default : break; } return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::timerHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::setFocusHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)FALSE; } // virtuals void MainWindow::dibReceived(HGLOBAL hDib) { BITMAPINFO *pBitmapInfo; BYTE *pBitmapImage; DWORD sizeImageData; ::OutputDebugString("MainWindow::dibReceived"); pBitmapInfo=(BITMAPINFO*)::GlobalLock(hDib); sizeImageData=sizeof(BITMAPINFOHEADER)+(sizeof(RGBQUAD)*pBitmapInfo->bmiHeader.biClrUsed)+(pBitmapInfo->bmiHeader.biWidth*pBitmapInfo->bmiHeader.biHeight); pBitmapImage=::new BYTE[sizeImageData]; ::memcpy((char*)pBitmapImage,(char*)pBitmapInfo,sizeImageData); ::GlobalUnlock(hDib); ::GlobalFree(hDib); } int MainWindow::negotiateCapabilities(void) { ::OutputDebugString("MainWindow::negotiateCapabilities"); // TW_IMAGEINFO imageInfo; // getImageInfo(imageInfo); enableFeeder(false); setXferCount(1); // setCurrentResolution(640,480); // setCurrentUnits(TWUN_PIXELS); // setCurrentPixelType(TWPT_GRAY); // setOrientation(TWOR_PORTRAIT); // setCurrentResolution(100,100); // double left(35); // double top(35); // setImageLayout(0,0,1024,768); return true; } void MainWindow::twainError(TW_ERR error) { ::OutputDebugString("MainWindow::twainError"); dropToState(SOURCE_MANAGER_OPEN); } int MainWindow::message(String message,int retCode) { ::MessageBox(*this,message.str(),"Message",MB_OK); return retCode; }