#include #include #include #include #include #include #include char MainWindow::szClassName[]="Proto"; char MainWindow::szMenuName[]=""; 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), mlpFolderTree(0) { insertHandlers(); registerClass(); ::CreateWindow(szClassName,szClassName, WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_DLGFRAME|WS_SIZEBOX|WS_CLIPCHILDREN, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,mhInstance,(LPSTR)this); show(SW_SHOW); update(); } MainWindow::~MainWindow() { if(mlpFolderTree){delete mlpFolderTree;mlpFolderTree=0;} destroy(); } void MainWindow::insertHandlers(void) { insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); insertHandler(VectorHandler::PaintHandler,&mPaintHandler); insertHandler(VectorHandler::CreateHandler,&mCreateHandler); insertHandler(VectorHandler::TimerHandler,&mTimerHandler); } void MainWindow::removeHandlers(void) { removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); removeHandler(VectorHandler::PaintHandler,&mPaintHandler); 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; 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)(COLOR_WINDOW+1); 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)FALSE; } CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::commandHandler(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; } #define makeItemID(nodeType,itemID) MAKELPARAM(itemID,nodeType) CallbackData::ReturnType MainWindow::timerHandler(CallbackData &/*someCallbackData*/) { enum {RootID=0x0000}; enum NodeType{NullNode=0x0000,ImportTerminalNode=0x0001,ExportTerminalNode=0x0002, CodeTerminalNode=0x0003,DataTerminalNode=0x0004}; killTimer(0); mlpFolderTree=new FolderTree(*this); mlpFolderTree->addRootNode(FolderTree::FolderClosed,"Image Sections",makeItemID(NullNode,RootID)); TreeViewItem firstItem(0,0,0,0,"foo",3,FolderTree::FolderClosed,FolderTree::FolderOpen,0,makeItemID(ImportTerminalNode,1)); mlpFolderTree->addNode(TreeView::NodeChild,firstItem,"Image Sections"); mlpFolderTree->appendNode(TreeView::NodeSibling,0,"section(foo)",0); mlpFolderTree->appendNode(TreeView::NodeSibling,0,"section(bar)",0); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) { setTimer(0,250); return (CallbackData::ReturnType)FALSE; }