//for array_data_ports void delete_connection(LINKStruct *myactconnect){ int o,c; o=myactconnect->to_object;c=-1; for(;myactconnect->to_port!=-1;myactconnect++) memcpy(myactconnect,(void *)(myactconnect+1),sizeof(struct LINKStruct)); close_toolbox(); }
LRESULT CALLBACK MeterWndHandler(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int t; THRESHOLDOBJ * st; st=NULL; for (t=0;(t<GLOBAL.objects)&&(st==NULL);t++) if (objects[t]->type==OB_THRESHOLD) { st=(THRESHOLDOBJ *)objects[t]; if (st->displayWnd!=hWnd) st=NULL; } if (st==NULL) return DefWindowProc( hWnd, message, wParam, lParam ); switch( message ) { case WM_DESTROY: break; case WM_KEYDOWN: SendMessage(ghWndMain, message,wParam,lParam); break; case WM_MOUSEACTIVATE: st->redraw=1; close_toolbox(); actobject=st; SetWindowPos(hWnd,HWND_TOP,0,0,0,0,SWP_DRAWFRAME|SWP_NOMOVE|SWP_NOSIZE); InvalidateRect(ghWndDesign,NULL,TRUE); break; case WM_SIZE: case WM_MOVE: { WINDOWPLACEMENT wndpl; GetWindowPlacement(st->displayWnd, &wndpl); st->top=wndpl.rcNormalPosition.top; st->left=wndpl.rcNormalPosition.left; st->right=wndpl.rcNormalPosition.right; st->bottom=wndpl.rcNormalPosition.bottom; } st->redraw=1; InvalidateRect(hWnd,NULL,TRUE); break; case WM_ERASEBKGND: st->redraw=1; return 0; case WM_PAINT: draw_meter(st); break; default: return DefWindowProc( hWnd, message, wParam, lParam ); } return 0; }
LRESULT CALLBACK MeterWndHandler(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int t; THRESHOLDOBJ * st; st=NULL; for (t=0;(t<GLOBAL.objects)&&(st==NULL);t++) if (objects[t]->type==OB_THRESHOLD) { st=(THRESHOLDOBJ *)objects[t]; if (st->displayWnd!=hWnd) st=NULL; } if (st==NULL) return DefWindowProc( hWnd, message, wParam, lParam ); switch( message ) { case WM_DESTROY: break; case WM_KEYDOWN: // printf("keydown: %ld, %ld\n",lParam,wParam); switch(wParam) { case KEY_UP: // step=st->gain/50; //if (step<1) step=1; st->from_input+=1; InvalidateRect(st->displayWnd,NULL,TRUE); break; case KEY_DOWN: // step=st->gain/50; // if (step<1) step=1; st->from_input-=1; InvalidateRect(st->displayWnd,NULL,TRUE); break; } break; case WM_MOUSEACTIVATE: st->redraw=1; close_toolbox(); actobject=st; SetWindowPos(hWnd,HWND_TOP,0,0,0,0,SWP_DRAWFRAME|SWP_NOMOVE|SWP_NOSIZE); InvalidateRect(ghWndDesign,NULL,TRUE); break; case WM_SIZE: case WM_MOVE: { WINDOWPLACEMENT wndpl; GetWindowPlacement(st->displayWnd, &wndpl); if (GLOBAL.locksession) { wndpl.rcNormalPosition.top=st->top; wndpl.rcNormalPosition.left=st->left; wndpl.rcNormalPosition.right=st->right; wndpl.rcNormalPosition.bottom=st->bottom; SetWindowPlacement(st->displayWnd, &wndpl); SetWindowLong(st->displayWnd, GWL_STYLE, GetWindowLong(st->displayWnd, GWL_STYLE)&~WS_SIZEBOX); } else { st->top=wndpl.rcNormalPosition.top; st->left=wndpl.rcNormalPosition.left; st->right=wndpl.rcNormalPosition.right; st->bottom=wndpl.rcNormalPosition.bottom; st->redraw=TRUE; SetWindowLong(st->displayWnd, GWL_STYLE, GetWindowLong(st->displayWnd, GWL_STYLE) | WS_SIZEBOX); } InvalidateRect(hWnd,NULL,TRUE); } break; case WM_ERASEBKGND: st->redraw=1; return 0; case WM_PAINT: draw_meter(st); break; default: return DefWindowProc( hWnd, message, wParam, lParam ); } return 0; }
BOOL load_configfile(LPCTSTR pszFileName) { HANDLE hFile; int t, act_samplingrate=DEF_PACKETSPERSECOND; int act_type,num_objects, save_toolbox, save_connected, try_connect; const char * d_name; char new_name[256],szdata[20]; write_logfile("loading design configuration: %s",(char *)pszFileName); hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if(hFile != INVALID_HANDLE_VALUE) { GLOBAL.loading=1; d_name=pszFileName; while (strstr(d_name,"\\")) d_name=strstr(d_name,"\\")+1; strcpy(new_name,"BrainBay - ");strcat(new_name,d_name); SetWindowText(ghWndMain,new_name); strcpy(GLOBAL.configfile,pszFileName); save_settings(); save_toolbox=-1; save_connected=TTY.CONNECTED; SendMessage(ghWndStatusbox,WM_COMMAND, IDC_STOPSESSION,0); //TTY.read_pause=1; close_captfile(); if (ghWndAnimation!=NULL) SendMessage(ghWndAnimation,WM_CLOSE,0,0); ghWndAnimation=NULL; close_toolbox();actobject=NULL; //InvalidateRect(ghWndMain, NULL, TRUE); while (GLOBAL.objects>0) free_object(0); GLOBAL.run_exception=0; GLOBAL.minimized=FALSE; load_next_config_buffer(hFile); load_property("objects",P_INT,&GLOBAL.objects); load_property("main-top",P_INT,&GLOBAL.top); load_property("main-left",P_INT,&GLOBAL.left); load_property("main-right",P_INT,&GLOBAL.right); load_property("main-bottom",P_INT,&GLOBAL.bottom); load_property("anim-top",P_INT,&GLOBAL.anim_top); load_property("anim-left",P_INT,&GLOBAL.anim_left); load_property("anim-right",P_INT,&GLOBAL.anim_right); load_property("anim-bottom",P_INT,&GLOBAL.anim_bottom); load_property("design-top",P_INT,&GLOBAL.design_top); load_property("design-left",P_INT,&GLOBAL.design_left); load_property("design-right",P_INT,&GLOBAL.design_right); load_property("design-bottom",P_INT,&GLOBAL.design_bottom); load_property("tool-top",P_INT,&GLOBAL.tool_top); load_property("tool-left",P_INT,&GLOBAL.tool_left); load_property("tool-right",P_INT,&GLOBAL.tool_right); load_property("tool-bottom",P_INT,&GLOBAL.tool_bottom); load_property("showdesign",P_INT,&GLOBAL.showdesign); load_property("hidestatus",P_INT,&GLOBAL.hidestatus); load_property("showtoolbox",P_INT,&GLOBAL.showtoolbox); load_property("autorun",P_INT,&GLOBAL.autorun); load_property("minimized",P_INT,&GLOBAL.minimized); save_toolbox=GLOBAL.showtoolbox; TTY.PORT=0;try_connect=0; load_property("comport",P_INT,&TTY.PORT); load_property("connected",P_INT,&try_connect); load_property("bidirect",P_INT,&TTY.BIDIRECT); load_property("devicetype",P_INT,&TTY.devicetype); load_property("samplingtype",P_INT,&TTY.samplingrate); load_property("baudtype",P_INT,&TTY.BAUDRATE); load_property("flow_control",P_INT,&TTY.FLOW_CONTROL); if (save_connected) { update_p21state(); save_connected=TTY.CONNECTED; } BreakDownCommPort(); if (try_connect) { TTY.CONNECTED=SetupCommPort(TTY.PORT); update_p21state(); } load_property("captfilename",P_STRING,CAPTFILE.filename); load_property("captfiletype",P_INT,&CAPTFILE.filetype); load_property("captfileoffset",P_INT,&CAPTFILE.offset); load_property("dialoginterval",P_INT,&GLOBAL.dialog_interval); load_property("drawinterval",P_INT,&GLOBAL.draw_interval); load_property("samplingrate",P_INT,&act_samplingrate); PACKETSPERSECOND=act_samplingrate; MoveWindow(ghWndMain,GLOBAL.left,GLOBAL.top,GLOBAL.right-GLOBAL.left,GLOBAL.bottom-GLOBAL.top,TRUE); MoveWindow(ghWndDesign,GLOBAL.design_left,GLOBAL.design_top,GLOBAL.design_right-GLOBAL.design_left,GLOBAL.design_bottom-GLOBAL.design_top,TRUE); if (!GLOBAL.showdesign) { ShowWindow(ghWndDesign, FALSE); SetDlgItemText(ghWndStatusbox,IDC_DESIGN,"Show Design"); } else { ShowWindow(ghWndDesign,TRUE); SetWindowPos(ghWndDesign,0,0,0,0,0,SWP_DRAWFRAME|SWP_NOMOVE|SWP_NOSIZE); SetDlgItemText(ghWndStatusbox,IDC_DESIGN,"Hide Design"); } if (!GLOBAL.hidestatus) ShowWindow(ghWndStatusbox, TRUE); else ShowWindow(ghWndStatusbox,FALSE); num_objects=GLOBAL.objects; GLOBAL.objects=0; for (t=0;t<num_objects;t++) { act_type=load_next_config_buffer(hFile); if (act_type>=0) { create_object(act_type); if (actobject != NULL ) { actobject->load(hFile); link_object(actobject); } else critical_error("Could not load all objects, quitting ...\ndelete brainbay.cfg to prevent this at program startup ... "); } } CloseHandle(hFile); for (t=0;t<num_objects;t++) objects[t]->update_inports(); update_dimensions(); CAPTFILE.filehandle=INVALID_HANDLE_VALUE; CAPTFILE.do_read=0; if (strcmp(CAPTFILE.filename,"none")) { char st[150]; reduce_filepath(st,CAPTFILE.filename); strcpy(CAPTFILE.filename,GLOBAL.resourcepath); strcat(CAPTFILE.filename,"ARCHIVES\\"); strcat(CAPTFILE.filename,st); open_captfile(CAPTFILE.filename); } init_system_time(); reset_oscilloscopes(); PACKET.readstate=0; ShowWindow( ghWndMain, TRUE ); UpdateWindow( ghWndMain ); update_samplingrate(act_samplingrate); update_devicetype(); get_session_length(); SetDlgItemInt(ghWndStatusbox,IDC_SAMPLINGRATE,act_samplingrate,0); SetDlgItemText(ghWndStatusbox,IDC_STATUS,"Configuration loaded"); SetDlgItemText(ghWndStatusbox,IDC_TIME,"0.0"); SetDlgItemText(ghWndStatusbox,IDC_JUMPPOS,"0.0"); sprintf(szdata, "%.1f", (float)GLOBAL.session_length/(float)PACKETSPERSECOND); SetDlgItemText(ghWndStatusbox,IDC_SESSLEN,szdata); SendMessage(GetDlgItem(ghWndStatusbox,IDC_SESSIONPOS),TBM_SETPOS,TRUE,(LONG)0); SendMessage(GetDlgItem(ghWndStatusbox,IDC_SESSIONPOS),TBM_SETSELEND,TRUE,(LONG)0); SendMessage(GetDlgItem(ghWndStatusbox,IDC_SESSIONPOS),TBM_SETSELSTART,TRUE,(LONG)0); SetWindowPos(ghWndMain,0,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); InvalidateRect(ghWndMain,NULL,TRUE); InvalidateRect(ghWndDesign,NULL,TRUE); SendMessage(GetDlgItem(ghWndStatusbox,IDC_SESSIONPOS),TBM_SETSELSTART,TRUE,0); SendMessage(GetDlgItem(ghWndStatusbox,IDC_SESSIONPOS),TBM_SETSELEND,TRUE,1000); SendMessage(GetDlgItem(ghWndStatusbox,IDC_SESSIONPOS),TBM_SETPOS,TRUE,(LONG)(0)); if (GLOBAL.minimized) ShowWindow(ghWndMain, SW_MINIMIZE); GLOBAL.loading=0; if ((GLOBAL.autorun) && (!GLOBAL.run_exception)) SendMessage(ghWndStatusbox,WM_COMMAND, IDC_RUNSESSION,0); if (save_toolbox!=-1) { GLOBAL.showtoolbox=save_toolbox; actobject=objects[GLOBAL.showtoolbox]; actobject->make_dialog(); } write_logfile("load successful"); return TRUE; } write_logfile("could not load design configuration file."); return FALSE; }
void create_object(int type) { int i; close_toolbox(); write_logfile("creating object: %s",objnames[type]); switch(type) { case OB_EEG: actobject=new EEGOBJ(GLOBAL.objects); deviceobject=actobject; actobject->object_size=sizeof(EEGOBJ);break; case OB_MIDI: actobject=new MIDIOBJ(GLOBAL.objects); actobject->object_size=sizeof(MIDIOBJ);break; case OB_OSCI: actobject=new OSCIOBJ(GLOBAL.objects); actobject->object_size=sizeof(OSCIOBJ);break; case OB_FFT: actobject=new FFTOBJ(GLOBAL.objects); actobject->object_size=sizeof(FFTOBJ);break; case OB_THRESHOLD: actobject=new THRESHOLDOBJ(GLOBAL.objects); actobject->object_size=sizeof(THRESHOLDOBJ);break; case OB_FILTER: actobject=new FILTEROBJ(GLOBAL.objects); actobject->object_size=sizeof(FILTEROBJ);break; case OB_MAGNITUDE: actobject=new MAGNITUDEOBJ(GLOBAL.objects); actobject->object_size=sizeof(MAGNITUDEOBJ);break; case OB_PARTICLE: actobject=new PARTICLEOBJ(GLOBAL.objects); actobject->object_size=sizeof(PARTICLEOBJ);break; case OB_TRANSLATE: actobject=new TRANSLATEOBJ(GLOBAL.objects); actobject->object_size=sizeof(TRANSLATEOBJ);break; case OB_SIGNAL: actobject=new SIGNALOBJ(GLOBAL.objects); actobject->object_size=sizeof(SIGNALOBJ);break; case OB_AND: actobject=new ANDOBJ(GLOBAL.objects); actobject->object_size=sizeof(ANDOBJ);break; case OB_OR: actobject=new OROBJ(GLOBAL.objects); actobject->object_size=sizeof(OROBJ);break; case OB_NOT: actobject=new NOTOBJ(GLOBAL.objects); actobject->object_size=sizeof(NOTOBJ);break; case OB_WAV: actobject=new WAVOBJ(GLOBAL.objects); actobject->object_size=sizeof(WAVOBJ);break; case OB_TCP_RECEIVER:actobject=new TCP_RECEIVEOBJ(GLOBAL.objects); actobject->object_size=sizeof(TCP_RECEIVEOBJ);break; case OB_DOKU: actobject=new DOKUOBJ(GLOBAL.objects); actobject->object_size=sizeof(DOKUOBJ);break; case OB_EVAL: actobject=new EVALOBJ(GLOBAL.objects); actobject->object_size=sizeof(EVALOBJ);break; case OB_AVI: actobject=new AVIOBJ(GLOBAL.objects); actobject->object_size=sizeof(AVIOBJ);break; case OB_AVERAGE: actobject=new AVERAGEOBJ(GLOBAL.objects); actobject->object_size=sizeof(AVERAGEOBJ);break; case OB_CORR: actobject=new CORRELATIONOBJ(GLOBAL.objects); actobject->object_size=sizeof(CORRELATIONOBJ);break; case OB_EDF_READER: actobject=new EDF_READEROBJ(GLOBAL.objects); actobject->object_size=sizeof(EDF_READEROBJ);break; case OB_EDF_WRITER: actobject=new EDF_WRITEROBJ(GLOBAL.objects); actobject->object_size=sizeof(EDF_WRITEROBJ);break; case OB_TCP_SENDER: actobject=new TCP_SENDEROBJ(GLOBAL.objects); actobject->object_size=sizeof(TCP_SENDEROBJ);break; case OB_COMPARE: actobject=new COMPAREOBJ(GLOBAL.objects); actobject->object_size=sizeof(COMPAREOBJ);break; case OB_BALLGAME: actobject=new BALLGAMEOBJ(GLOBAL.objects); actobject->object_size=sizeof(BALLGAMEOBJ);break; case OB_MIXER4: actobject=new MIXER4OBJ(GLOBAL.objects); actobject->object_size=sizeof(MIXER4OBJ);break; case OB_MOUSE: actobject=new MOUSEOBJ(GLOBAL.objects); actobject->object_size=sizeof(MOUSEOBJ);break; case OB_ERPDETECT: actobject=new ERPDETECTOBJ(GLOBAL.objects); actobject->object_size=sizeof(ERPDETECTOBJ);break; case OB_COM_WRITER: actobject=new COM_WRITEROBJ(GLOBAL.objects); actobject->object_size=sizeof(COM_WRITEROBJ);break; case OB_CAM: actobject=new CAMOBJ(GLOBAL.objects); actobject->object_size=sizeof(CAMOBJ);break; case OB_INTEGRATE: actobject=new INTEGRATEOBJ(GLOBAL.objects); actobject->object_size=sizeof(INTEGRATEOBJ);break; case OB_DEBOUNCE: actobject=new DEBOUNCEOBJ(GLOBAL.objects); actobject->object_size=sizeof(DEBOUNCEOBJ);break; case OB_SAMPLE_HOLD: actobject=new SAMPLE_HOLDOBJ(GLOBAL.objects); actobject->object_size=sizeof(SAMPLE_HOLDOBJ);break; case OB_CONSTANT: actobject=new CONSTANTOBJ(GLOBAL.objects); actobject->object_size=sizeof(CONSTANTOBJ);break; case OB_MATLAB: actobject=new MATLABOBJ(GLOBAL.objects); actobject->object_size=sizeof(MATLABOBJ);break; case OB_COUNTER: actobject=new COUNTEROBJ(GLOBAL.objects); actobject->object_size=sizeof(COUNTEROBJ);break; #ifndef MINGW case OB_SKINDIALOG: actobject=new SKINDIALOGOBJ(GLOBAL.objects); actobject->object_size=sizeof(SKINDIALOGOBJ);break; #endif case OB_FILE_WRITER: actobject=new FILE_WRITEROBJ(GLOBAL.objects); actobject->object_size=sizeof(FILE_WRITEROBJ);break; case OB_DEVIATION: actobject=new DEVIATIONOBJ(GLOBAL.objects); actobject->object_size=sizeof(DEVIATIONOBJ);break; case OB_MCIPLAYER: actobject=new MCIOBJ(GLOBAL.objects); actobject->object_size=sizeof(MCIOBJ);break; case OB_KEYSTRIKE: actobject=new KEYSTRIKEOBJ(GLOBAL.objects); actobject->object_size=sizeof(KEYSTRIKEOBJ);break; case OB_PEAKDETECT: actobject=new PEAKDETECTOBJ(GLOBAL.objects); actobject->object_size=sizeof(PEAKDETECTOBJ);break; case OB_SPELLER: actobject=new SPELLEROBJ(GLOBAL.objects); actobject->object_size=sizeof(SPELLEROBJ);break; case OB_MARTINI: actobject=new MARTINIOBJ(GLOBAL.objects); actobject->object_size=sizeof(MARTINIOBJ);break; case OB_FILE_READER: actobject=new FILE_READEROBJ(GLOBAL.objects); actobject->object_size=sizeof(FILE_READEROBJ);break; case OB_PORT_IO: actobject=new PORTOBJ(GLOBAL.objects); actobject->object_size=sizeof(PORTOBJ);break; case OB_ARRAY3600: actobject=new ARRAY3600OBJ(GLOBAL.objects); actobject->object_size=sizeof(ARRAY3600OBJ);break; case OB_COMREADER: actobject=new COMREADEROBJ(GLOBAL.objects); actobject->object_size=sizeof(COMREADEROBJ);break; case OB_NEUROBIT: actobject=new NEUROBITOBJ(GLOBAL.objects); deviceobject=actobject; actobject->object_size=sizeof(NEUROBITOBJ);break; case OB_MIN: actobject=new MINOBJ(GLOBAL.objects); actobject->object_size=sizeof(MINOBJ);break; case OB_MAX: actobject=new MAXOBJ(GLOBAL.objects); actobject->object_size=sizeof(MAXOBJ);break; case OB_ROUND: actobject=new ROUNDOBJ(GLOBAL.objects); actobject->object_size=sizeof(ROUNDOBJ);break; case OB_DIFFERENTIATE: actobject=new DIFFERENTIATEOBJ(GLOBAL.objects); actobject->object_size=sizeof(DIFFERENTIATEOBJ);break; case OB_DELAY: actobject=new DELAYOBJ(GLOBAL.objects); actobject->object_size=sizeof(DELAYOBJ);break; case OB_LIMITER: actobject=new LIMITEROBJ(GLOBAL.objects); actobject->object_size=sizeof(LIMITEROBJ);break; case OB_EMOTIV: actobject=new EMOTIVOBJ(GLOBAL.objects); deviceobject=actobject; actobject->object_size=sizeof(EMOTIVOBJ);break; case OB_FLOATVECTOR: actobject=new FLOATVECTOROBJ(GLOBAL.objects); actobject->object_size=sizeof(FLOATVECTOROBJ);break; case OB_VECTORFLOAT: actobject=new VECTORFLOATOBJ(GLOBAL.objects); actobject->object_size=sizeof(VECTORFLOATOBJ);break; case OB_DISPLAYVECTOR: actobject=new DISPLAYVECTOROBJ(GLOBAL.objects); actobject->object_size=sizeof(DISPLAYVECTOROBJ);break; case OB_BUFFER: actobject=new BUFFEROBJ(GLOBAL.objects); actobject->object_size=sizeof(BUFFEROBJ);break; } if (actobject) { actobject->type = type; actobject->xPos=50; actobject->yPos=40; i=actobject->inports; if (i<actobject->outports) i=actobject->outports; if (!actobject->width) actobject->width=55; if (!actobject->height) actobject->height=CON_START+i*CON_HEIGHT+5; if (!actobject->tag[0]) strcpy(actobject->tag,objnames[type]); for (i=0;i<MAX_CONNECTS;i++) { actobject->out[i].from_object=GLOBAL.objects; actobject->out[i].from_port=-1; actobject->out[i].to_object=-1; actobject->out[i].to_port=-1; strcpy(actobject->out[i].dimension,"uV"); actobject->out[i].min=-250;actobject->out[i].max=250; } objects[GLOBAL.objects]=actobject; GLOBAL.objects++; if (!GLOBAL.loading) { actobject->make_dialog(); // InvalidateRect(ghWndMain,NULL,TRUE); InvalidateRect(ghWndDesign,NULL,TRUE); } if (actobject->displayWnd) SetForegroundWindow(actobject->displayWnd); } }
DWORD WINAPI CamProc(LPVOID lpv) { l_t=SDL_GetTicks(); HANDLE hArray[1]; DWORD dwRes; BOOL CamThreadDone=FALSE; MSG msg; hArray[0] = CamExitEvent; char fname[256]; //if (!capture) //{ if ((camobj->mode == 2) && (strstr(camobj->videofilename,".avi"))) capture = cvCaptureFromAVI( camobj->videofilename ); else capture = cvCaptureFromCAM( 0 ); if((!capture ) && (camobj->mode!=1)) { if (!GLOBAL.loading) close_toolbox(); report_error("Could not connect to WebCamera"); } strcpy(fname,GLOBAL.resourcepath); strcat(fname,cascade_name); cascade = (CvHaarClassifierCascade*)cvLoad( fname, 0, 0, 0 ); if( !cascade ) { SetDlgItemText(ghWndStatusbox, IDC_STATUS,"ERROR: Could not load classifier cascade"); return(0); } storage = cvCreateMemStorage(0); if (camobj->showlive) { cvNamedWindow( "Camera", 0 ); cvMoveWindow("Camera",0,0); cvSetMouseCallback( "Camera", on_mouse, 0 ); } while (!CamThreadDone) { dwRes = WaitForMultipleObjects(1, hArray, FALSE, 0); switch(dwRes) { case WAIT_OBJECT_0: CamThreadDone = TRUE; case WAIT_TIMEOUT: // timeouts are not reported break; default: // report_error("WaitForMultipleObjects(CamExitEvent) does not return"); break; } if(!GetMessage(&msg, NULL, 0, 0)) break; TranslateMessage(&msg); DispatchMessage(&msg); a_t=SDL_GetTicks(); if (a_t-l_t>update_rate) { frame = cvQueryFrame( capture ); lk_work(camobj); cur_rate=a_t-l_t; l_t=a_t; } else Sleep(3); } return(1); }
// // function: MainWndHandler(HWND, unsigned, WORD, LONG) // // purpose: make initialisations (globals, Def-TTY settings) // create Toolbox Dialog // // process Menu Selections // load/save Config // play/capture Archive // open midi-device // change com settings // connect/disconnect to EEG-amp // load/save Config // // scale and paint the channel-oscilloscope // // // LRESULT CALLBACK MainWndHandler(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; char sztemp[256]; switch( message ) { case WM_CREATE: break; case WM_ENABLE: if ((wParam==TRUE) && (NB_OBJ != NULL)) { NB_OBJ->update_channelinfo(); NB_OBJ=NULL; } break; case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Menüauswahlen analysieren: switch( wmId ) { case IDM_NEWCONFIG: stop_timer(); TTY.read_pause=1; //BreakDownCommPort(); CAPTFILE.do_read=0; close_captfile(); if (ghWndAnimation!=NULL) SendMessage(ghWndAnimation,WM_CLOSE,0,0); ghWndAnimation=NULL; close_toolbox(); write_logfile("new config: deleting all objects."); while (GLOBAL.objects>0) free_object(0); deviceobject=NULL; GLOBAL.showdesign=TRUE; ShowWindow(ghWndDesign,TRUE); SetWindowPos(ghWndDesign,HWND_TOP,0,0,0,0,SWP_DRAWFRAME|SWP_NOMOVE|SWP_NOSIZE); SetDlgItemText(ghWndStatusbox,IDC_DESIGN,"Hide Design"); GLOBAL.hidestatus=FALSE; ShowWindow(ghWndStatusbox,TRUE); SetWindowText(ghWndMain,"BrainBay"); GLOBAL.configfile[0]=0; init_system_time(); PACKET.readstate=0; GLOBAL.session_length=0; SetDlgItemText(ghWndStatusbox,IDC_STATUS,"ready."); SetDlgItemInt(ghWndStatusbox,IDC_SAMPLINGRATE,PACKETSPERSECOND,0); SetDlgItemText(ghWndStatusbox,IDC_STATUS,"Configuration loaded"); SetDlgItemText(ghWndStatusbox,IDC_TIME,"0.0"); SetDlgItemText(ghWndStatusbox,IDC_JUMPPOS,"0.0"); SetDlgItemText(ghWndStatusbox,IDC_SESSLEN,"0.0"); SendMessage(GetDlgItem(ghWndStatusbox,IDC_SESSIONPOS),TBM_SETPOS,TRUE,(LONG)0); SendMessage(GetDlgItem(ghWndStatusbox,IDC_SESSIONPOS),TBM_SETSELEND,TRUE,(LONG)0); SendMessage(GetDlgItem(ghWndStatusbox,IDC_SESSIONPOS),TBM_SETSELSTART,TRUE,(LONG)0); InvalidateRect(ghWndDesign,NULL,TRUE); InvalidateRect(ghWndMain,NULL,TRUE); break; case IDM_SAVECONFIG: { char configfilename[MAX_PATH]; int save_toolbox=GLOBAL.showtoolbox; close_toolbox(); GLOBAL.showtoolbox=save_toolbox; strcpy(configfilename,GLOBAL.resourcepath); if (GLOBAL.configfile[0]==0) strcat(configfilename,"CONFIGURATIONS\\*.con"); else strcpy(configfilename,GLOBAL.configfile); if (open_file_dlg(hWnd,configfilename, FT_CONFIGURATION, OPEN_SAVE)) { if (!save_configfile(configfilename)) report_error("Could not save Config File"); else { char * d_name,new_name[80]; write_logfile("configruation saved."); d_name=configfilename; while (strstr(d_name,"\\")) d_name=strstr(d_name,"\\")+1; strcpy(new_name,"BrainBay - ");strcat(new_name,d_name); SetWindowText(ghWndMain,new_name); } } if (GLOBAL.showtoolbox!=-1) { actobject=objects[GLOBAL.showtoolbox]; actobject->make_dialog(); } } break; case IDM_LOADCONFIG: { char configfilename[MAX_PATH]; close_toolbox(); strcpy(configfilename,GLOBAL.resourcepath); strcat(configfilename,"CONFIGURATIONS\\*.con"); if (open_file_dlg(hWnd,configfilename, FT_CONFIGURATION, OPEN_LOAD)) { write_logfile("load config: free existing objects."); if (!load_configfile(configfilename)) report_error("Could not load Config File"); else sort_objects(); } } break; case IDM_ABOUT: close_toolbox(); DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)AboutDlgHandler); break; case IDM_HELP: { char tmpfile [250]; close_toolbox(); strcpy(tmpfile,GLOBAL.resourcepath); strcat(tmpfile,"brainbay_user_manual.pdf"); ShellExecute(0, "open", tmpfile, NULL, NULL, SW_SHOWNORMAL); } break; case IDM_VIEWLASTLOGFILE: { char tmpfile [250]; close_toolbox(); strcpy(tmpfile,GLOBAL.resourcepath); strcat(tmpfile,"bbay.log"); ShellExecute(0, "open", tmpfile, NULL, NULL, SW_SHOWNORMAL); } break; case IDM_EXIT: DestroyWindow( hWnd ); break; case IDM_PLAY: SendMessage(ghWndStatusbox,WM_COMMAND, IDC_RUNSESSION,0); break; case IDM_STOP: SendMessage(ghWndStatusbox,WM_COMMAND, IDC_STOPSESSION,0); break; case IDM_NEUROSERVER: strcpy(sztemp,GLOBAL.resourcepath); strcat(sztemp,"NETWORK\\nsd.exe"); ShellExecute(hWnd, "open", sztemp, NULL, NULL, SW_SHOWNORMAL); break; case IDM_READEDF: { char edffilename[MAX_PATH]; close_toolbox(); strcpy(edffilename,GLOBAL.resourcepath); strcat(edffilename,"ARCHIVES\\*.edf"); if (open_file_dlg(hWnd,edffilename, FT_EDF, OPEN_LOAD)) { strcpy(sztemp,GLOBAL.resourcepath); strcat(sztemp,"NETWORK\\readedf.exe"); ShellExecute(hWnd, NULL, sztemp, edffilename, NULL, SW_SHOWNORMAL); } } break; case IDM_EDITCOLORS: close_toolbox(); display_toolbox(CreateDialog(hInst, (LPCTSTR)IDD_EDITCOLORBOX, ghWndStatusbox, (DLGPROC)COLORDlgHandler)); break; case IDM_EDITSCALES: close_toolbox(); display_toolbox(CreateDialog(hInst, (LPCTSTR)IDD_EDITSCALEBOX, ghWndStatusbox, (DLGPROC)SCALEDlgHandler)); break; case IDM_SETTINGS: if (ghWndSettings==NULL) ghWndSettings=CreateDialog(hInst, (LPCTSTR)IDD_SETTINGSBOX, ghWndStatusbox, (DLGPROC)SETTINGSDlgHandler); else SetForegroundWindow(ghWndSettings); break; case IDM_DEVICESETTINGS: if (deviceobject) { close_toolbox(); actobject=deviceobject; // GLOBAL.showtoolbox=find_object(devicebox); actobject->make_dialog(); if (actobject->displayWnd) SetWindowPos(actobject->displayWnd,HWND_TOP,0,0,0,0,SWP_DRAWFRAME|SWP_NOMOVE|SWP_NOSIZE); } else report ("No Amplifier Device present in the design"); break; case IDM_INSERTMIDI: create_object(OB_MIDI); break; case IDM_INSERTSPECTRUM: create_object(OB_FFT); break; case IDM_INSERTTHRESHOLD: create_object(OB_THRESHOLD); break; case IDM_INSERTFILTER: create_object(OB_FILTER); break; case IDM_INSERTMAGNITUDE:create_object(OB_MAGNITUDE); break; case IDM_INSERTPARTICLE:create_object(OB_PARTICLE); break; case IDM_INSERTOSCI:create_object(OB_OSCI); break; case IDM_INSERTTRANSLATE:create_object(OB_TRANSLATE); break; case IDM_INSERTSIGNAL:create_object(OB_SIGNAL); break; case IDM_INSERTAND:create_object(OB_AND); break; case IDM_INSERTOR:create_object(OB_OR); break; case IDM_INSERTNOT:create_object(OB_NOT); break; case IDM_INSERTWAV: if (!count_objects(OB_WAV)) create_object(OB_WAV); else report_error("Currently only one Sound player is supported."); break; case IDM_INSERTTCPRECEIVER:create_object(OB_TCP_RECEIVER); break; case IDM_INSERTDOKU:create_object(OB_DOKU); break; case IDM_INSERTEVAL:create_object(OB_EVAL); break; case IDM_INSERTAVI:create_object(OB_AVI); break; case IDM_INSERTAVERAGE:create_object(OB_AVERAGE); break; case IDM_INSERTCORR:create_object(OB_CORR); break; case IDM_INSERTEDFWRITER:create_object(OB_EDF_WRITER); break; case IDM_INSERTTCPSENDER:create_object(OB_TCP_SENDER); break; case IDM_INSERTEDFREADER:create_object(OB_EDF_READER); break; case IDM_INSERTCOMPARE:create_object(OB_COMPARE); break; case IDM_INSERTBALLGAME:create_object(OB_BALLGAME); break; case IDM_INSERTMIXER4:create_object(OB_MIXER4); break; case IDM_INSERTMOUSE:create_object(OB_MOUSE); break; case IDM_INSERTERPDETECT:create_object(OB_ERPDETECT); break; case IDM_INSERTCOM_WRITER:create_object(OB_COM_WRITER); break; case IDM_INSERTCAM: if (!count_objects(OB_CAM)) create_object(OB_CAM); break; case IDM_INSERTINTEGRATE:create_object(OB_INTEGRATE); break; case IDM_INSERTDEBOUNCE:create_object(OB_DEBOUNCE); break; case IDM_INSERTSAMPLE_HOLD:create_object(OB_SAMPLE_HOLD); break; case IDM_INSERTCONSTANT:create_object(OB_CONSTANT); break; case IDM_INSERTMATLAB:create_object(OB_MATLAB); break; case IDM_INSERTCOUNTER:create_object(OB_COUNTER); break; case IDM_INSERTSKINDIALOG: if (!count_objects(OB_SKINDIALOG)) create_object(OB_SKINDIALOG); break; case IDM_INSERTFILE_WRITER:create_object(OB_FILE_WRITER); break; case IDM_INSERTDEVIATION:create_object(OB_DEVIATION); break; case IDM_INSERTMCIPLAYER:create_object(OB_MCIPLAYER); break; case IDM_INSERTKEYSTRIKE:create_object(OB_KEYSTRIKE); break; case IDM_INSERTPEAKDETECT:create_object(OB_PEAKDETECT); break; case IDM_INSERTSPELLER:create_object(OB_SPELLER); break; case IDM_INSERTMARTINI:create_object(OB_MARTINI); break; case IDM_INSERTFILE_READER:create_object(OB_FILE_READER); break; case IDM_INSERTPORT_IO:create_object(OB_PORT_IO); break; case IDM_INSERTARRAY3600:create_object(OB_ARRAY3600); break; case IDM_INSERTCOMREADER:create_object(OB_COMREADER); break; case IDM_INSERTMIN:create_object(OB_MIN); break; case IDM_INSERTMAX:create_object(OB_MAX); break; case IDM_INSERTROUND:create_object(OB_ROUND); break; case IDM_INSERTDIFFERENTIATE:create_object(OB_DIFFERENTIATE); break; case IDM_INSERTDELAY:create_object(OB_DELAY); break; case IDM_INSERTLIMITER:create_object(OB_LIMITER); break; case IDM_INSERTFLOATVECTOR: create_object(OB_FLOATVECTOR); break; case IDM_INSERTVECTORFLOAT: create_object(OB_VECTORFLOAT); break; case IDM_INSERTDISPLAYVECTOR: create_object(OB_DISPLAYVECTOR); break; case IDM_INSERTVECTORBUFFER: create_object(OB_BUFFER); break; // here are th supported EED devices case IDM_INSERT_EEG_GENERIC8: if (!count_objects(OB_EEG)) { TTY.devicetype=DEV_RAW8BIT; create_object(OB_EEG);} break; case IDM_INSERT_EEG_GENERIC16: if (!count_objects(OB_EEG)) { TTY.devicetype=DEV_RAW; create_object(OB_EEG);} break; case IDM_INSERT_EEG_IBVA: if (!count_objects(OB_EEG)) { TTY.devicetype=DEV_IBVA; create_object(OB_EEG);} break; case IDM_INSERT_EEG_NIA: if (!count_objects(OB_EEG)) { TTY.devicetype=DEV_NIA; create_object(OB_EEG);} break; case IDM_INSERT_EEG_P21: if (!count_objects(OB_EEG)) { TTY.devicetype=DEV_MONOLITHEEG_P21; create_object(OB_EEG);} break; case IDM_INSERT_EEG_OPENBCI8: if (!count_objects(OB_EEG)) { TTY.devicetype=DEV_OPENBCI8; create_object(OB_EEG);} break; case IDM_INSERT_EEG_P2: if (!count_objects(OB_EEG)) { TTY.devicetype=DEV_MODEEG_P2; create_object(OB_EEG);} break; case IDM_INSERT_EEG_P3: if (!count_objects(OB_EEG)) { TTY.devicetype=DEV_MODEEG_P3; create_object(OB_EEG);} break; case IDM_INSERT_EEG_PENDANT: if (!count_objects(OB_EEG)) { TTY.devicetype=DEV_PENDANT3; create_object(OB_EEG);} break; case IDM_INSERT_EEG_QDS: if (!count_objects(OB_EEG)) { TTY.devicetype=DEV_QDS; create_object(OB_EEG);} break; case IDM_INSERT_EEG_SBT4: if (!count_objects(OB_EEG)) { TTY.devicetype=DEV_SBT4; create_object(OB_EEG);} break; case IDM_INSERT_EEG_SBT2: if (!count_objects(OB_EEG)) { TTY.devicetype=DEV_SBT2; create_object(OB_EEG);} break; // these devices need special care (seperate element) case IDM_INSERTOPTIMA: if ((!count_objects(OB_NEUROBIT)) && (!count_objects(OB_EEG))) create_object(OB_NEUROBIT); break; case IDM_INSERTEMOTIV: if ((!count_objects(OB_EMOTIV)) && (!count_objects(OB_EEG))) create_object(OB_EMOTIV); break; case IDM_COPY: if (actobject) { copy_object=actobject; if ((copy_object->type!=OB_EEG)&&(copy_object->type!=OB_WAV)&&(copy_object->type!=OB_CAM) &&(copy_object->type!=OB_SKINDIALOG)&&(copy_object->type!=OB_NEUROBIT)) { HANDLE hFile; char tmpfile[256]; create_object(copy_object->type); strcpy(tmpfile,GLOBAL.resourcepath); strcat(tmpfile,"tmp_copy.con"); hFile = CreateFile(tmpfile, GENERIC_WRITE, 0, NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(hFile != INVALID_HANDLE_VALUE) { copy_object->save(hFile); save_property(hFile,"end Object",P_END,NULL); CloseHandle(hFile); } hFile = CreateFile(tmpfile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if(hFile != INVALID_HANDLE_VALUE) { load_next_config_buffer(hFile); actobject->load(hFile); CloseHandle(hFile); DeleteFile(tmpfile); } actobject->xPos+=10; actobject->yPos+=10; } close_toolbox(); } break; default: return DefWindowProc( hWnd, message, wParam, lParam ); } break; case WM_ACTIVATE: { /* char t[50]; static int cn=0; cn++; sprintf(t,"%d:%d,%d",cn,HIWORD(lParam),LOWORD(lParam)); //==WA_CLICKACTIVE)) SendDlgItemMessage(ghWndStatusbox,IDC_LIST2, LB_ADDSTRING, 0, (LPARAM) t); SendDlgItemMessage(ghWndStatusbox,IDC_LIST2, LB_SETCURSEL, SendDlgItemMessage(ghWndStatusbox,IDC_LIST2, LB_GETCOUNT, 0, 0)-1, 0); UpdateWindow(ghWndStatusbox); */ if ((LOWORD(lParam)==WA_CLICKACTIVE) || (HIWORD(lParam)==WA_CLICKACTIVE)) SetWindowPos(ghWndMain,HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); SetFocus(ghWndMain); } break; case WM_ACTIVATEAPP: { /* char t[50]; static int cn=0; cn++; sprintf(t,"%d:%d,%d",cn,HIWORD(lParam),LOWORD(lParam)); //==WA_CLICKACTIVE)) SendDlgItemMessage(ghWndStatusbox,IDC_LIST2, LB_ADDSTRING, 0, (LPARAM) t); SendDlgItemMessage(ghWndStatusbox,IDC_LIST2, LB_SETCURSEL, SendDlgItemMessage(ghWndStatusbox,IDC_LIST2, LB_GETCOUNT, 0, 0)-1, 0); UpdateWindow(ghWndStatusbox); */ // if ((LOWORD(lParam)==1828) || (LOWORD(lParam)==964)) //SetWindowPos(ghWndMain,HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); SetWindowPos(ghWndMain,0,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); // return DefWindowProc( hWnd, message, wParam, lParam ); } break; case WM_KEYDOWN: if (lParam==KEY_DELETE ) SendMessage(ghWndDesign, message,wParam,lParam); break; case WM_SIZE: if (wParam== SIZE_MAXIMIZED) { GLOBAL.main_maximized=lParam; ShowWindow(ghWndStatusbox,TRUE); GLOBAL.hidestatus=FALSE; if (GLOBAL.session_length==0) SetWindowPos(ghWndStatusbox, ghWndMain, 4, HIWORD(lParam)+15, LOWORD(lParam)-8,HIWORD(lParam), 0); else SetWindowPos(ghWndStatusbox, ghWndMain, 4, HIWORD(lParam)-20, LOWORD(lParam)-8,HIWORD(lParam), 0); } else if (wParam== SIZE_RESTORED) { WINDOWPLACEMENT wndpl; GetWindowPlacement(ghWndMain, &wndpl); GLOBAL.top=wndpl.rcNormalPosition.top; GLOBAL.left=wndpl.rcNormalPosition.left; GLOBAL.right=wndpl.rcNormalPosition.right; GLOBAL.bottom=wndpl.rcNormalPosition.bottom; GLOBAL.main_maximized=0; update_status_window(); } else if (wParam== SIZE_MINIMIZED) { ShowWindow(ghWndStatusbox,FALSE); GLOBAL.hidestatus=TRUE; } break; case WM_MOVE: { WINDOWPLACEMENT wndpl; GetWindowPlacement(ghWndMain, &wndpl); GLOBAL.top=wndpl.rcNormalPosition.top; GLOBAL.left=wndpl.rcNormalPosition.left; GLOBAL.right=wndpl.rcNormalPosition.right; GLOBAL.bottom=wndpl.rcNormalPosition.bottom; update_status_window(); } break; //case WM_PAINT: // break; case WM_DESTROY: actobject=0; GlobalCleanup(); PostQuitMessage( 0 ); break; case WM_INPUT: if ((TTY.CONNECTED) && (!GLOBAL.loading)) ReadNIA( wParam, lParam); // NIA Daten vorhanden: auslesen return(TRUE); default: return DefWindowProc( hWnd, message, wParam, lParam ); } return 0; }
LRESULT CALLBACK AVIWndHandler(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int t; AVIOBJ * st; st=NULL; for (t=0; (t<GLOBAL.objects)&&(st==NULL); t++) if (objects[t]!=NULL) if (objects[t]->type==OB_AVI) { st=(AVIOBJ *)objects[t]; if (st!=NULL) if (st->displayWnd!=hWnd) st=NULL; } if (st!=NULL) switch( message ) { case WM_DESTROY: Shutdown_GL(st->GLRC); break; case WM_KEYDOWN: SendMessage(ghWndMain, message,wParam,lParam); break; case WM_ACTIVATE: if (wParam==WA_CLICKACTIVE) { close_toolbox(); actobject=st; // actobject->make_dialog(); SetActiveWindow(hWnd); SetFocus(hWnd); } break; case WM_COMMAND: break; case WM_SIZE: // Size_GL(hWnd, st->GLRC,1); case WM_MOVE: { WINDOWPLACEMENT wndpl; GetWindowPlacement(st->displayWnd, &wndpl); st->top=wndpl.rcNormalPosition.top; st->left=wndpl.rcNormalPosition.left; st->right=wndpl.rcNormalPosition.right; st->bottom=wndpl.rcNormalPosition.bottom; } InvalidateRect(st->displayWnd,NULL,FALSE); break; case WM_PAINT: { PAINTSTRUCT ps; HDC hDC = BeginPaint(hWnd, &ps); if (strcmp(st->avifile,"none")) { wglMakeCurrent(hDC, st->GLRC); //glLoadIdentity (); // Reset The Modelview Matrix //glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer st->GrabAVIFrame(st->frame,hDC); // Grab A Frame From The AVI wglMakeCurrent(0, 0); } EndPaint(hWnd, &ps); } break; default: return DefWindowProc( hWnd, message, wParam, lParam ); } else return DefWindowProc( hWnd, message, wParam, lParam ); return 0; }
LRESULT CALLBACK ButtonWndHandler(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int t; BUTTONOBJ * st; st=NULL; for (t=0;(t<GLOBAL.objects)&&(st==NULL);t++) if (objects[t]->type==OB_BUTTON) { st=(BUTTONOBJ *)objects[t]; if (st->displayWnd!=hWnd) st=NULL; } if (st==NULL) return DefWindowProc( hWnd, message, wParam, lParam ); switch( message ) { case WM_DESTROY: break; case WM_MOUSEACTIVATE: st->redraw=1; close_toolbox(); actobject=st; SetWindowPos(hWnd,HWND_TOP,0,0,0,0,SWP_DRAWFRAME|SWP_NOMOVE|SWP_NOSIZE); InvalidateRect(ghWndDesign,NULL,TRUE); break; case WM_LBUTTONDOWN: { int actx,acty,minpoint,i; float actdist,mindist; actx=(int)LOWORD(lParam); acty=(int)HIWORD(lParam); printf("button pressed in wnd %ld at: %ld, %ld\n",hWnd, actx,acty); // if (distance (actx, acty, NAVI_X+170, NAVI_Y+33) < NAVI_SELECTDISTANCE) SendMessage(hWnd, WM_KEYDOWN, KEY_BACKSPACE,0); switch (st->buttonfunction) { case BUTTONFUNCTION_PLAYSESSION: SendMessage(ghWndStatusbox,WM_COMMAND,IDC_RUNSESSION,0); break; case BUTTONFUNCTION_STOPSESSION: SendMessage(ghWndStatusbox,WM_COMMAND,IDC_STOPSESSION,0); break; case BUTTONFUNCTION_ENDSESSION: SendMessage(ghWndStatusbox,WM_COMMAND,IDC_ENDSESSION,0); break; case BUTTONFUNCTION_VAL1VAL2: case BUTTONFUNCTION_VAL1INV: st->state=STATE_PRESSED; break; case BUTTONFUNCTION_TOGGLEVAL: st->togglecount=!(st->togglecount); break; case BUTTONFUNCTION_TOGGLE1SEC: st->state=STATE_PRESSED; st->togglecount=1; break; case BUTTONFUNCTION_DEVSETTINGS: SendMessage(ghWndMain,WM_COMMAND,IDM_DEVICESETTINGS,0); break; case BUTTONFUNCTION_APPSETTINGS: SendMessage(ghWndMain,WM_COMMAND,IDM_SETTINGS,0); break; } } break; case WM_GETMINMAXINFO: { MINMAXINFO* mmi = (MINMAXINFO*)lParam; //mmi->ptMaxSize.x = 10; //mmi->ptMaxSize.y = 10; mmi->ptMinTrackSize.x = 5; mmi->ptMinTrackSize.y = 5; //mmi->ptMaxTrackSize.x = 10; //mmi->ptMaxTrackSize.y = 10; return 0; } case WM_SIZE: case WM_MOVE: { WINDOWPLACEMENT wndpl; GetWindowPlacement(st->displayWnd, &wndpl); st->redraw=TRUE; if (GLOBAL.locksession) { wndpl.rcNormalPosition.top=st->top; wndpl.rcNormalPosition.left=st->left; wndpl.rcNormalPosition.right=st->right; wndpl.rcNormalPosition.bottom=st->bottom; SetWindowPlacement(st->displayWnd, &wndpl); //if (st->displayborder) SetWindowLong(st->displayWnd, GWL_STYLE, (WS_CLIPSIBLINGS| WS_CHILD | WS_CAPTION | WS_THICKFRAME )&~WS_SIZEBOX); // else SetWindowLong(st->displayWnd, GWL_STYLE, 0); SetWindowLong(st->displayWnd, GWL_STYLE, GetWindowLong(st->displayWnd, GWL_STYLE)&~WS_SIZEBOX); // if (st->displayborder) SetWindowLong(st->displayWnd, GWL_STYLE, GetWindowLong(st->displayWnd, GWL_STYLE)&~WS_SIZEBOX); // else SetWindowLong(st->displayWnd, GWL_STYLE, 0); } else { st->top=wndpl.rcNormalPosition.top; st->left=wndpl.rcNormalPosition.left; st->right=wndpl.rcNormalPosition.right; st->bottom=wndpl.rcNormalPosition.bottom; st->redraw=TRUE; st->redraw=TRUE; // SetWindowLong(st->displayWnd, GWL_STYLE, (WS_CLIPSIBLINGS| WS_CHILD | WS_CAPTION | WS_THICKFRAME | WS_SIZEBOX)); SetWindowLong(st->displayWnd, GWL_STYLE, GetWindowLong(st->displayWnd, GWL_STYLE) | WS_SIZEBOX); } update_border(st->displayWnd,st->displayborder); InvalidateRect(hWnd,NULL,TRUE); } break; case WM_ERASEBKGND: st->redraw=1; return 0; case WM_PAINT: draw_button(st); break; default: return DefWindowProc( hWnd, message, wParam, lParam ); } return 0; }