// WinMain int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int cmdShow){ argv =CommandLineToArgvW(GetCommandLineW(),&argc); directory = getDirectory(); srand(time(0)); #ifdef _DEBUG console(); #endif loadSaves(); int height=768,width =1024; calcSizes(768-menuHeight,1024-border); WNDCLASSEX wc; //HDC hDC; HGLRC hRC; // register window class //definere et vindues classe og dens parametre/udsende wc.cbSize = sizeof(WNDCLASSEX); wc.style = 0; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; //alt tab icon + windows linie icon wc.hIcon = LoadIcon( GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1) ); //look of the cursor wc.hCursor = LoadCursor( NULL, IDC_ARROW ); //background color wc.hbrBackground = (HBRUSH)GetSysColorBrush(COLOR_3DFACE); //menu bar wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1); wc.lpszClassName = "main"; //icon venstre top hjørne //følgende virker også, loader dog default 32x32 icon //LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1)); wc.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16, 16, 0); if(!RegisterClassEx(&wc)){ MessageBox(NULL, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK); return 0; } // create main window hWnd = CreateWindowEx( WS_EX_CLIENTEDGE, "main", "Walking With Dinosaurs", WS_THICKFRAME | WS_CAPTION | WS_VISIBLE | WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX |WS_CLIPCHILDREN |WS_MAXIMIZEBOX, GetSystemMetrics(SM_CXMAXIMIZED)/2-SM_CXFIXEDFRAME/2-width/2-listWidth, GetSystemMetrics(SM_CYMAXIMIZED)/2-SM_CYFIXEDFRAME/2-height/2, 1024, 768, NULL, NULL, hInstance, NULL ); //simulations window // register window class wc.cbSize = sizeof(WNDCLASSEX); //cs_owndc svaes the cach, used for painting outside normal routine wc.style = CS_OWNDC; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground = (HBRUSH)GetStockObject( BLACK_BRUSH ); wc.lpszMenuName = NULL; wc.lpszClassName = "blank"; if(!RegisterClassEx(&wc)){ MessageBox(NULL, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK); return 0; } blank = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("blank"), "", WS_CHILD | WS_VISIBLE ,listWidth,bAreaHeight,simWidth,simHeight, hWnd,(HMENU)IDC_SIM, GetModuleHandle(NULL), NULL); EnableOpenGL( blank, &hDC, &hRC ); //selection listbox hWndList = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("listbox"), "", WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_AUTOVSCROLL|LBS_NOTIFY,0, 0, listWidth, listHeight, hWnd, (HMENU)IDC_LISTBOX, GetModuleHandle(NULL), NULL); for(int i=0;i<(int)saves.size();i++){ SendMessage(hWndList, LB_ADDSTRING, 0, (LPARAM)saves.at(i)->name.c_str()); } SendMessage(hWndList,LB_SETCURSEL,0,0); //init creature/world WWDPhysics = new Physics(); readDNA(&saves.at(0)->dna,WWDPhysics); WWDPhysics->runSimStartUp(); WWDPhysics->reshape(simWidth,simHeight); //settings area int row1=10,row2=35, row3 =60; int col1 =160,col2=col1+170,col3=500,col4=col3+170, col5=340,col6=col5+170; HWND hWndFitS=CreateWindowEx(NULL,TEXT("STATIC"), "Fitness Test",WS_CHILD|WS_VISIBLE, col1, row1, 100, 18, hWnd, (HMENU)IDC_TEST_STATIC, GetModuleHandle(NULL), NULL); HWND hwndCombo = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("combobox"), "", WS_CHILD | WS_VISIBLE| CBS_DROPDOWNLIST ,col2, row1-5, 150, 24, hWnd, (HMENU)IDC_FITNESSTYPE_COMBOBOX, GetModuleHandle(NULL), NULL); SendMessage(hwndCombo,CB_ADDSTRING, 0, (LPARAM)"Move"); SendMessage(hwndCombo,CB_SETITEMDATA, 0, move); SendMessage(hwndCombo,CB_ADDSTRING, 0, (LPARAM)"Iterative Move"); SendMessage(hwndCombo,CB_SETITEMDATA, 1, iterateMove); SendMessage(hwndCombo,CB_ADDSTRING, 0, (LPARAM)"Dwarfslayer Move"); SendMessage(hwndCombo,CB_SETITEMDATA, 2, dwarfslayerMove); SendMessage(hwndCombo,CB_ADDSTRING, 0, (LPARAM)"Fat Loving Move"); SendMessage(hwndCombo,CB_SETITEMDATA, 3, fatLovingMove); SendMessage(hwndCombo,CB_ADDSTRING, 0, (LPARAM)"Box Loving Move"); SendMessage(hwndCombo,CB_SETITEMDATA, 4, boxLovingMove); SendMessage(hwndCombo,CB_ADDSTRING, 0, (LPARAM)"Jump"); SendMessage(hwndCombo,CB_SETITEMDATA, 5, jump); SendMessage(hwndCombo,CB_ADDSTRING, 0, (LPARAM)"Combi"); SendMessage(hwndCombo,CB_SETITEMDATA, 6, combi); SendMessage(hwndCombo,CB_ADDSTRING, 0, (LPARAM)"None"); SendMessage(hwndCombo,CB_SETITEMDATA, 7, none); SendMessage(hwndCombo,CB_SETCURSEL,0,0); WWDPhysics->addFitnessFunction(move,1); HWND hWndButton=CreateWindowEx(NULL,TEXT("BUTTON"), "RUN", WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON, col1, row3, 100, 24, hWnd, (HMENU)IDC_RUN_BUTTON, GetModuleHandle(NULL), NULL); HWND hWndResetButton=CreateWindowEx(NULL,TEXT("BUTTON"), "Reset Simulation", WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON, col3, row3, 150, 24, hWnd, (HMENU)IDC_RESET_BUTTON, GetModuleHandle(NULL), NULL); HGDIOBJ hfDefault=GetStockObject(DEFAULT_GUI_FONT); SendMessage(hWndButton,WM_SETFONT, (WPARAM)hfDefault, MAKELPARAM(FALSE,0)); HWND hWndNoG=CreateWindowEx(NULL,TEXT("STATIC"),"Number of Generations",WS_CHILD|WS_VISIBLE, col1, row2, 150, 18, hWnd, (HMENU)IDC_NOG_STATIC, GetModuleHandle(NULL), NULL); HWND hWndNoGS=CreateWindowEx(NULL,TEXT("EDIT"), "50",WS_CHILD|WS_VISIBLE|ES_NUMBER, col2, row2, 42, 18, hWnd, (HMENU)IDC_NOG_EDIT, GetModuleHandle(NULL), NULL); HWND hWndPopS=CreateWindowEx(NULL,TEXT("STATIC"), "Population Size",WS_CHILD|WS_VISIBLE, col3, row1, 150, 18, hWnd, (HMENU)IDC_POP_STATIC, GetModuleHandle(NULL), NULL); HWND hWndPop=CreateWindowEx(NULL,TEXT("EDIT"), "100",WS_CHILD|WS_VISIBLE |ES_NUMBER, col4, row1, 42, 18, hWnd, (HMENU)IDC_POP_EDIT, GetModuleHandle(NULL), NULL); HWND hWndViewRate=CreateWindowEx(NULL,TEXT("STATIC"), "Simulation view precision",WS_CHILD|WS_VISIBLE, col3, row2, 200, 18, hWnd, (HMENU)IDC_VIEW_STATIC, GetModuleHandle(NULL), NULL); HWND hWndViewRateB=CreateWindowEx(NULL,TEXT("BUTTON"), "",WS_CHILD|WS_VISIBLE | BS_CHECKBOX, col4, row2, 100, 18, hWnd, (HMENU)IDC_VIEW_CHECKBOX, GetModuleHandle(NULL), NULL); SendMessage(hWndViewRateB, BM_SETCHECK, BST_CHECKED,0); fixedSteps=true; EnableWindow(hWndViewRateB,false); MSG msg = messageLoop(hDC, hRC); return msg.wParam; }
/* Calculate all offset in font set. Start by assuming the best possible case where all variable-length offsets are 1-byte long and calculate sizes and offsets. Then recalculate all sizes and offsets and iterate until there are no further changes. */ static void fillOffsets(tcprivCtx h) { int i; /* Initialize header */ h->cffHdr.major = TC_MAJOR; h->cffHdr.minor = TC_MINOR; h->cffHdr.offSize = 1; /* Compute initial font sizes */ h->size.FontNames = 0; h->size.dicts = 0; h->size.gsubrs = subrSizeGlobal(h->g); for (i = 0; i < h->set.cnt; i++) { fillInitialSizes(h, &h->set.array[i]); } h->size.nameINDEX = INDEX_SIZE(h->set.cnt, h->size.FontNames); h->size.dictINDEX = INDEX_SIZE(h->set.cnt, h->size.dicts); /* Iterate offset computation until final offset remains unchanged */ h->offset.copyright = 0; while (calcOffsets(h)) { calcSizes(h); } h->cffHdr.hdrSize = CFF_HEADER_SIZE; /* Fill index headers */ h->nameHdr.count = (unsigned short)h->set.cnt; h->nameHdr.offSize = INDEX_OFF_SIZE(h->size.FontNames); h->dictHdr.count = (unsigned short)h->set.cnt; h->dictHdr.offSize = INDEX_OFF_SIZE(h->size.dicts); /* Add offsets to dictionaries */ for (i = 0; i < h->set.cnt; i++) { Font *font = &h->set.array[i]; if (font->offset.encoding != 0) { /* Save encoding offset */ dictSaveInt(&font->dict, font->offset.encoding); DICTSAVEOP(font->dict, cff_Encoding); } if (!(font->flags & FONT_SYNTHETIC)) { if (font->offset.charset != 0) { /* Save charset offset */ dictSaveInt(&font->dict, font->offset.charset); DICTSAVEOP(font->dict, cff_charset); } if (!(font->flags & FONT_CHAMELEON)) { /* Save CharString offset */ dictSaveInt(&font->dict, font->offset.CharStrings); DICTSAVEOP(font->dict, cff_CharStrings); } if (font->flags & FONT_CID) { int j; /* Save FDSelect offset */ dictSaveInt(&font->dict, font->offset.fdselect); DICTSAVEOP(font->dict, cff_FDSelect); /* Save FDArray offset */ dictSaveInt(&font->dict, font->offset.FDArray); DICTSAVEOP(font->dict, cff_FDArray); for (j = 0; j < font->fdCount; j++) { FDInfo *fdInfo = &font->fdInfo[j]; if (fdInfo->seenChar) { /* Save Private sizes/offsets */ dictSaveInt(&fdInfo->FD, fdInfo->size.Private); dictSaveInt(&fdInfo->FD, fdInfo->offset.Private); DICTSAVEOP(fdInfo->FD, cff_Private); if (fdInfo->size.Subrs != 0) { /* Save Subrs offset */ dictSaveInt(&fdInfo->Private, fdInfo->offset.Subrs); DICTSAVEOP(fdInfo->Private, cff_Subrs); } } } } else { /* Save Private size/offset */ dictSaveInt(&font->dict, font->size.Private); dictSaveInt(&font->dict, font->offset.Private); DICTSAVEOP(font->dict, cff_Private); if (font->size.Subrs != 0) { /* Save Subrs offset */ dictSaveInt(&font->Private, font->offset.Subrs); DICTSAVEOP(font->Private, cff_Subrs); } } } } }
//Main Window Procedure LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ switch (message) { case WM_SYSKEYDOWN: { if (lParam & 1<<29) { WWDPhysics->m_modifierKeys = VK_LMENU; } break; } case WM_SYSKEYUP: { if (lParam & 1<<29) { WWDPhysics->m_modifierKeys = VK_LMENU; } else { WWDPhysics->m_modifierKeys = 0; } break; } case WM_SIZE: // Size Action Has Taken Place switch (wParam) // Evaluate Size Action { case SIZE_MINIMIZED: // Was Window Minimized? return 0; // Return case SIZE_MAXIMIZED: { // Was Window Maximized? int Width = LOWORD (lParam); int Height = HIWORD (lParam); calcSizes(HIWORD (lParam),LOWORD (lParam)); MoveWindow(hWndList,0,0,listWidth,listHeight,true); MoveWindow(blank,listWidth,bAreaHeight,simWidth,simHeight,true); if (sOpenGLInitialized) { WWDPhysics->reshape(simWidth,simHeight); } } return 0; // Return //resize case SIZE_RESTORED:// Was Window Restored? if(hwnd == hWnd) { int Width = LOWORD (lParam); int Height = HIWORD (lParam); calcSizes(HIWORD (lParam),LOWORD (lParam)); MoveWindow(hWndList,0,0,listWidth,listHeight,true); MoveWindow(blank,listWidth,bAreaHeight,simWidth,simHeight,true); if (sOpenGLInitialized){ WWDPhysics->reshape(simWidth,simHeight); } } return 0; // Return } break; case WM_CREATE: { } return 0; case WM_MBUTTONUP: { int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); WWDPhysics->mouseFunc(1,1,xPos,yPos); POINT p = POINT(); p.x=xPos; p.y=yPos; SetFocus(ChildWindowFromPoint(hwnd,p)); break; } case WM_MBUTTONDOWN: { int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); WWDPhysics->mouseFunc(1,0,xPos,yPos); POINT p = POINT(); p.x=xPos; p.y=yPos; SetFocus(ChildWindowFromPoint(hwnd,p)); break; } case WM_LBUTTONUP: { int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); WWDPhysics->mouseFunc(0,1,xPos,yPos); POINT p = POINT(); p.x=xPos; p.y=yPos; SetFocus(ChildWindowFromPoint(hwnd,p)); break; } case 0x020A://WM_MOUSEWHEEL: { int zDelta = (short)HIWORD(wParam); int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); if (zDelta>0) WWDPhysics->zoomIn(); else WWDPhysics->zoomOut(); break; } case WM_MOUSEMOVE: { int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); WWDPhysics->mouseMotionFunc(xPos,yPos); break; } case WM_RBUTTONUP: { int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); WWDPhysics->mouseFunc(2,1,xPos,yPos); POINT p = POINT(); p.x=xPos; p.y=yPos; SetFocus(ChildWindowFromPoint(hwnd,p)); break; } case WM_RBUTTONDOWN: { int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); WWDPhysics->mouseFunc(2,0,xPos,yPos); POINT p = POINT(); p.x=xPos; p.y=yPos; SetFocus(ChildWindowFromPoint(hwnd,p)); break; } case WM_LBUTTONDOWN: { int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); WWDPhysics->mouseFunc(0,0,xPos,yPos); POINT p = POINT(); p.x=xPos; p.y=yPos; SetFocus(ChildWindowFromPoint(hwnd,p)); break; } case WM_CONTEXTMENU: { POINT p; GetCursorPos(&p); ScreenToClient(hWndList,&p); int index = SendMessage(hWndList,LB_ITEMFROMPOINT,0, MAKELPARAM(p.x,p.y)); int noElements = SendMessage(hWndList,LB_GETCOUNT,0,0); if(0<=index && index <noElements){ popupMenuSel=index; HMENU popupMenu = CreatePopupMenu(); InsertMenu(popupMenu,0,MF_BYPOSITION|MF_STRING,IDC_RUN_MBUTTON,"Run"); InsertMenu(popupMenu,0,MF_BYPOSITION|MF_STRING,IDC_RENAME_MBUTTON,"Rename"); InsertMenu(popupMenu,0,MF_BYPOSITION|MF_STRING,IDC_DELETE_MBUTTON,"Delete"); #ifdef _DEBUG InsertMenu(popupMenu,0,MF_BYPOSITION|MF_STRING,IDC_SHOWDNA_MBUTTON,"Show DNA"); #endif GetCursorPos(&p); TrackPopupMenu(popupMenu,TPM_TOPALIGN|TPM_LEFTALIGN,p.x,p.y,0,hwnd,NULL); } break;} case WM_CLOSE: PostQuitMessage( 0 ); return 0; case WM_DESTROY: return 0; case WM_KEYUP: switch ( wParam ) { case VK_PRIOR: case VK_NEXT: case VK_END: case VK_HOME: case VK_LEFT: case VK_UP: case VK_RIGHT: case VK_DOWN: { if (WWDPhysics) WWDPhysics->specialKeyboardUp(wParam,0,0); return 0; } default: { WWDPhysics->keyboardUpCallback(tolower(wParam),0,0); } return DefWindowProc( hwnd, message, wParam, lParam ); } case WM_KEYDOWN: switch ( wParam ) { case VK_CONTROL: case VK_PRIOR: case VK_NEXT: case VK_END: case VK_HOME: case VK_LEFT: case VK_UP: case VK_RIGHT: case VK_DOWN: { if (WWDPhysics) WWDPhysics->specialKeyboard(wParam,0,0); break; } case ' ': { if (WWDPhysics) //WWDPhysics->clientResetScene(); if(saves.size()>0){ SendMessage(hWnd,WM_COMMAND,MAKEWPARAM(IDC_LISTBOX,LBN_SELCHANGE),0); } break; } case 'Q': case VK_ESCAPE: { quitRequest = 1; PostQuitMessage(0); } return 0; } return 0; case WM_CHAR: if (!quitRequest) WWDPhysics->keyboardCallback(wParam,0,0); break; case WM_COMMAND: switch(LOWORD(wParam)){ case IDC_VIEW_CHECKBOX: { HWND check = GetDlgItem(hwnd, IDC_VIEW_CHECKBOX); switch (SendMessage(check, BM_GETCHECK, 0,0)) { case BST_CHECKED: SendMessage(check, BM_SETCHECK, BST_UNCHECKED,0); fixedSteps=false; #ifdef _DEBUG printf("off\n"); #endif break; case BST_UNCHECKED: SendMessage(check, BM_SETCHECK, BST_CHECKED,0); fixedSteps=true; #ifdef _DEBUG printf("on\n"); #endif break; } } break; case IDC_FITNESSTYPE_COMBOBOX: switch (HIWORD(wParam)){ case CBN_SELCHANGE: HWND hwndfit = GetDlgItem(hwnd, IDC_FITNESSTYPE_COMBOBOX); int index = SendMessage(hwndfit, CB_GETCURSEL,0,0); fitnessTest tmptest=(fitnessTest) SendMessage(hwndfit,CB_GETITEMDATA, index,0); WWDPhysics->clearFitnessFunctions(); WWDPhysics->addFitnessFunction(tmptest,1); break; } break; case IDC_LISTBOX: { switch (HIWORD(wParam)){ case LBN_SELCHANGE: { HWND hwndList = GetDlgItem(hwnd, IDC_LISTBOX); // Get selected index. int index = (int)SendMessage(hwndList, LB_GETCURSEL, 0, 0); delete WWDPhysics; WWDPhysics = new Physics(); SendMessage(hWnd,WM_COMMAND,MAKEWPARAM(IDC_FITNESSTYPE_COMBOBOX,LBN_SELCHANGE),0); readDNA(&saves.at(index)->dna,WWDPhysics); WWDPhysics->runSimStartUp(); WWDPhysics->reshape(simWidth,simHeight); } } } break; case IDC_RESET_BUTTON: { if(saves.size()>0){ SendMessage(hWnd,WM_COMMAND,MAKEWPARAM(IDC_LISTBOX,LBN_SELCHANGE),0); } } break; case IDC_RUN_BUTTON: { HWND hwndList = GetDlgItem(hwnd, IDC_LISTBOX); _ASSERTE(hwndList != NULL); // Get current selection index in listbox int itemIndex = (int) SendMessage(hwndList, LB_GETCURSEL, (WPARAM)0, (LPARAM) 0); if (itemIndex == LB_ERR) { // No selection return 0; } //threads SYSTEM_INFO sysinfo; GetSystemInfo( &sysinfo ); int numCores= sysinfo.dwNumberOfProcessors; int pop =0; HWND hwndPop = GetDlgItem(hwnd, IDC_POP_EDIT); _ASSERTE(hwndPop != NULL); int length=0; length = GetWindowTextLength(hwndPop); if(length > 0){ TCHAR * text = new TCHAR[length + 1]; GetWindowText(hwndPop,text,length+1); for(int i =0; i<length;i++){ int value = ((int)text[i])-48; int res = (value* pow(10.,length-1-i)+0.5); pop+=res; } delete text; }else{ MessageBox(NULL, "No populastion size selected", TEXT("ERROR"), MB_OK | MB_ICONERROR); return 0; } if(pop<10){ MessageBox(NULL, "the Populasion size is to small", TEXT("ERROR"), MB_OK | MB_ICONERROR); return 0; } int noG = 0; HWND hwndNoG = GetDlgItem(hwnd, IDC_NOG_EDIT); _ASSERTE(hwndNoG != NULL); length=0; length = GetWindowTextLength(hwndNoG); if(length > 0){ TCHAR * text = new TCHAR[length + 1]; GetWindowText(hwndNoG,text,length+1); for(int i =0; i<length;i++){ int value = ((int)text[i])-48; int res = (value* pow(10.,length-1-i)+0.5); noG+=res; } delete text; }else{ MessageBox(NULL, "No number of generations selected", TEXT("ERROR"), MB_OK | MB_ICONERROR); return 0; } HWND hwndfit = GetDlgItem(hwnd, IDC_FITNESSTYPE_COMBOBOX); int index = SendMessage(hwndfit, CB_GETCURSEL,0,0); fitnessTest tmptest=(fitnessTest) SendMessage(hwndfit,CB_GETITEMDATA, index,0); noGenerations=noG; argumentList* aList = new argumentList(); aList->nC=numCores; aList->p=pop; aList->nG=noG; aList->iI=itemIndex; aList->stopSim=&stopSim; aList->type=tmptest; aList->theResult = new creature(); proInfo = new progressInfo(); HANDLE threadHandle = (HANDLE) _beginthreadex(0,0,&runServer,(void*)aList,0,0); UINT_PTR time = SetTimer(0,0,10,(TIMERPROC)&update); DialogBoxParam(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_PROGRESS), hwnd, progressControll,(LPARAM)&noG); KillTimer(0,time); save* tmpCreature =new save(); tmpCreature->dna= aList->theResult->dna; tmpCreature->fitness=aList->theResult->fitness; delete proInfo; delete aList->theResult; delete aList; DialogBoxParam(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_NAMING), hwnd, namingControl,(LPARAM)&tmpCreature->name); saves.push_back(tmpCreature); SendMessage(hWndList, LB_ADDSTRING, 0, (LPARAM)saves.at(saves.size()-1)->name.c_str()); SendMessage(hWndList,LB_SETCURSEL,saves.size()-1,0); delete WWDPhysics; WWDPhysics = new Physics(); WWDPhysics->addFitnessFunction(tmptest,1); readDNA(&saves.at(saves.size()-1)->dna,WWDPhysics); WWDPhysics->runSimStartUp(); WWDPhysics->reshape(simWidth,simHeight); } break; case IDC_RUN_MBUTTON: { HWND hwndList = GetDlgItem(hwnd, IDC_LISTBOX); SendMessage(hwndList,LB_SETCURSEL,popupMenuSel,0); SendMessage(hWnd,WM_COMMAND, MAKEWPARAM(IDC_RUN_BUTTON,0),0); } break; case IDC_RENAME_MBUTTON: { DialogBoxParam(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_NAMING), hwnd, namingControl,(LPARAM)&saves.at(popupMenuSel)->name); HWND hwndList = GetDlgItem(hwnd, IDC_LISTBOX); int itemIndex = (int) SendMessage(hwndList, LB_GETCURSEL, (WPARAM)0, (LPARAM) 0); for(int i =0; i<saves.size();i++){ SendMessage(hwndList,LB_DELETESTRING,0,0); } for(int i =0; i<saves.size();i++){ SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM)saves.at(i)->name.c_str()); } SendMessage(hwndList,LB_SETCURSEL,itemIndex,0); } break; case IDC_DELETE_MBUTTON: { HWND hwndList = GetDlgItem(hwnd, IDC_LISTBOX); int itemIndex = (int) SendMessage(hwndList, LB_GETCURSEL, (WPARAM)0, (LPARAM) 0); SendMessage(hwndList,LB_DELETESTRING,popupMenuSel,0); delete saves.at(popupMenuSel); saves.erase(saves.begin()+popupMenuSel,saves.begin()+popupMenuSel+1); if(itemIndex==popupMenuSel){ if(saves.size() > 0){ if(itemIndex==saves.size()){ itemIndex--; } SendMessage(hwndList,LB_SETCURSEL,itemIndex,0); SendMessage(hWnd,WM_COMMAND,MAKEWPARAM(IDC_LISTBOX,LBN_SELCHANGE),0); }else{ delete WWDPhysics; WWDPhysics=new Physics(); WWDPhysics->reshape(simWidth,simHeight); } } } break; case IDC_SHOWDNA_MBUTTON: { #ifdef _DEBUG HWND hwndList = GetDlgItem(hwnd, IDC_LISTBOX); printf("DNA of %s\n",saves.at(popupMenuSel)->name.c_str()); for(int i=0; i<saves.at(popupMenuSel)->dna.size();i++){ printf("%d, ", saves.at(popupMenuSel)->dna.at(i)); } printf("\n"); #endif } break; case ID_FILE_NEW40002: randomCreature(); while( (WWDPhysics->noBoxes<2) || (!WWDPhysics->runSimStartUp()) ){ {//deleting int itemIndex = (int) SendMessage(hWndList, LB_GETCURSEL, (WPARAM)0, (LPARAM) 0); SendMessage(hWndList,LB_DELETESTRING,itemIndex,0); delete saves.at(itemIndex); saves.erase(saves.begin()+itemIndex,saves.begin()+itemIndex+1); } randomCreature(); } break; case ID_FILE_SAVE40003: saveSaves(saves); break; case ID_FILE_EXIT: PostQuitMessage( 0 ); break; case ID_VIDEO_CAPTURE: if(VFWInit()){ captureVideo(hDC); MessageBox(hwnd, "Video Captured", TEXT("DONE"), MB_OK | MB_ICONINFORMATION); }else{ MessageBox(hwnd, "Video Capture failed to start\n Try another codec", TEXT("ERROR"), MB_OK | MB_ICONERROR); } SendMessage(hWnd,WM_COMMAND,MAKEWPARAM(IDC_LISTBOX,LBN_SELCHANGE),0); break; #ifdef _DEBUG default: printf(""); #endif } break; default: return DefWindowProc( hwnd, message, wParam, lParam ); } return 0; }