/**************************************************************************** * * Module Title : vfw_config_dlg.c * * Description : Configuration Parameters dialog module. * ****************************************************************************/ /**************************************************************************** * Header Files ****************************************************************************/ #include #include #include #include "type_aliases.h" #include "vp60_comp_interface.h" #include "resource.h" // Must be the version resident in the VCAP dll directory!!! #include "vpvfwver.h" #include "vp6vfw.h" #include "vp60_comp_interface.h" #include //#include extern HINSTANCE hInstance; void BuildVersionInfo(char *modname,char *VersionInfo,int *vers) { // ************************************************************ // The next bit of code reads version information from resource VersionInfo[0]=0; char szFullPath[256]; DWORD dwVerHnd; DWORD dwVerInfoSize; GetModuleFileName(/*GetModuleHandle(modname)*/hInstance, szFullPath, sizeof(szFullPath)); dwVerInfoSize = GetFileVersionInfoSize(szFullPath, &dwVerHnd); if (dwVerInfoSize) { // If we were able to get the information, process it: HANDLE hMem; LPVOID lpvMem; hMem = GlobalAlloc(GMEM_MOVEABLE, dwVerInfoSize); lpvMem = GlobalLock(hMem); GetFileVersionInfo(szFullPath, dwVerHnd, dwVerInfoSize, lpvMem); UINT cchVer = 0; LPSTR lszVer = NULL; strcat(VersionInfo, "\r"); VerQueryValue(lpvMem,TEXT("\\StringFileInfo\\040904E4\\FileDescription"), (void **) &lszVer, &cchVer); strcat(VersionInfo,lszVer); strcat(VersionInfo, "\r\r"); VerQueryValue(lpvMem,TEXT("\\StringFileInfo\\040904E4\\LegalCopyright"), (void **) &lszVer, &cchVer); strcat(VersionInfo,lszVer); strcat(VersionInfo, "\r"); strcat(VersionInfo, " Version "); VerQueryValue(lpvMem,TEXT("\\StringFileInfo\\040904E4\\ProductVersion"), (void **) &lszVer, &cchVer); strcat(VersionInfo,lszVer); GlobalUnlock(hMem); GlobalFree(hMem); } } BOOL FAR PASCAL Advanced_ParamsDlgProc( HWND hWndDlg,UINT Message,WPARAM wParam,LPARAM lParam ); BOOL FAR PASCAL General_ParamsDlgProc( HWND hWndDlg,UINT Message,WPARAM wParam,LPARAM lParam ); BOOL FAR PASCAL Settings_ParamsDlgProc( HWND hWndDlg,UINT Message,WPARAM wParam,LPARAM lParam ); BOOL FAR PASCAL Main_ParamsDlgProc( HWND hWndDlg, UINT Message, WPARAM wParam, LPARAM lParam) { COMP_CONFIG_VP6 *compConfig = (COMP_CONFIG_VP6 *)GetWindowLong(hWndDlg,GWL_USERDATA); switch(Message) { case WM_NOTIFY: { switch(wParam) { case IDC_TAB1: { NMHDR *msg = (NMHDR *) lParam; switch(msg->code) { case TCN_SELCHANGE: { HWND hwndTab = GetDlgItem(hWndDlg, IDC_TAB1); int whichTab = TabCtrl_GetCurSel(hwndTab); switch(whichTab) { case 2: { if(compConfig->PlaceHolder) DestroyWindow((HWND) compConfig->PlaceHolder); compConfig->PlaceHolder = (INT32) CreateDialogParam(hInstance,"SETTINGS",hWndDlg,Settings_ParamsDlgProc ,(LPARAM) compConfig); ShowWindow((HWND) compConfig->PlaceHolder,SW_SHOW); return TRUE; } case 0: { if(compConfig->PlaceHolder) DestroyWindow((HWND) compConfig->PlaceHolder); compConfig->PlaceHolder = (INT32) CreateDialogParam(hInstance,"GENERAL",hWndDlg,General_ParamsDlgProc ,(LPARAM) compConfig); ShowWindow((HWND) compConfig->PlaceHolder,SW_SHOW); return TRUE; } case 1: { if(compConfig->PlaceHolder) DestroyWindow((HWND) compConfig->PlaceHolder); compConfig->PlaceHolder = (INT32) CreateDialogParam(hInstance,"ADVANCED",hWndDlg,Advanced_ParamsDlgProc ,(LPARAM) compConfig); ShowWindow((HWND) compConfig->PlaceHolder,SW_SHOW); return TRUE; } } break; } } break; } } return (FALSE); } case WM_CTLCOLORSTATIC: { HDC hdc = (HDC) wParam; HWND hwndStatic = (HWND) lParam; if ( hwndStatic == GetDlgItem ( hWndDlg, IDC_TITLE ) || hwndStatic == GetDlgItem ( hWndDlg, IDC_FRAME ) ) { return (LRESULT) GetStockObject(WHITE_BRUSH); ; } } break; case WM_INITDIALOG: { HWND hwndTab = GetDlgItem(hWndDlg, IDC_TAB1); TC_ITEM tie; SetWindowLong(hWndDlg, GWL_USERDATA, (unsigned long)lParam); compConfig = (COMP_CONFIG_VP6 *) lParam; tie.mask = TCIF_TEXT | TCIF_STATE | TCIF_IMAGE; tie.iImage = -1; tie.pszText = "General"; if (TabCtrl_InsertItem(hwndTab, 0, &tie) == -1) return NULL; tie.pszText = "Advanced"; if (TabCtrl_InsertItem(hwndTab, 1, &tie) == -1) return NULL; tie.pszText = "Settings"; if (TabCtrl_InsertItem(hwndTab, 2, &tie) == -1) return NULL; char VersionString[2048]={0}; int vers; BuildVersionInfo("VP6VFW.DLL",VersionString,&vers); SetDlgItemText( hWndDlg, IDC_TITLE, VersionString); compConfig->PlaceHolder = (INT32) CreateDialogParam(hInstance,"GENERAL",hWndDlg,General_ParamsDlgProc ,(LPARAM) compConfig); ShowWindow((HWND) compConfig->PlaceHolder,SW_SHOW); return (TRUE); } case WM_CLOSE: /* Close the dialog. */ /* Closing the Dialog behaves the same as Cancel */ PostMessage(hWndDlg, WM_COMMAND, IDCANCEL, 0L); return (TRUE); case WM_COMMAND: /* A control has been activated. */ switch(LOWORD(wParam)) { /* OK leaves the current settings in force */ case IDOK: EndDialog(hWndDlg, IDOK); break; case IDCANCEL: EndDialog(hWndDlg, IDCANCEL); break; default: return (FALSE); } return (FALSE); default: return (FALSE); } /* End of Main Dialog case statement. */ return FALSE; } /* End of WndProc */ BOOL FAR PASCAL General_ParamsDlgProc( HWND hWndDlg, UINT Message, WPARAM wParam, LPARAM lParam) { COMP_CONFIG_VP6 *compConfig = (COMP_CONFIG_VP6 *)GetWindowLong(hWndDlg,GWL_USERDATA); switch(Message) { case WM_SETFOCUS: Message+=0; break; case WM_INITDIALOG: { SetWindowLong(hWndDlg, GWL_USERDATA, (unsigned long)lParam); compConfig = (COMP_CONFIG_VP6 *) lParam; // fill mode box SendDlgItemMessage(hWndDlg, IDD_MODE, CB_ADDSTRING, 0, (LPARAM) (LPCSTR) "Realtime / Live Encoding"); SendDlgItemMessage(hWndDlg, IDD_MODE, CB_ADDSTRING, 0, (LPARAM) (LPCSTR) "Good Quality Fast Encoding"); SendDlgItemMessage(hWndDlg, IDD_MODE, CB_ADDSTRING, 0, (LPARAM) (LPCSTR) "One Pass - Best Quality"); SendDlgItemMessage(hWndDlg, IDD_MODE, CB_ADDSTRING, 0, (LPARAM) (LPCSTR) "Two Pass - First Pass" ); SendDlgItemMessage(hWndDlg, IDD_MODE, CB_ADDSTRING, 0, (LPARAM) (LPCSTR) "Two Pass - Second Pass - Good Quality"); SendDlgItemMessage(hWndDlg, IDD_MODE, CB_ADDSTRING, 0, (LPARAM) (LPCSTR) "Two Pass - Second Pass - Best Quality"); // set mode SendDlgItemMessage(hWndDlg, IDD_MODE, CB_SETCURSEL, (LPARAM) compConfig->Mode,0); // set end usage switch(compConfig->EndUsage) { case 0: CheckDlgButton( hWndDlg, IDC_ENDUSAGE1, 1); CheckDlgButton( hWndDlg, IDC_ENDUSAGE2, 0); break; default: CheckDlgButton( hWndDlg, IDC_ENDUSAGE2, 1); CheckDlgButton( hWndDlg, IDC_ENDUSAGE1, 0); break; } // set material switch(compConfig->Interlaced) { case 1: CheckDlgButton( hWndDlg, IDC_MATERIAL1, 1); CheckDlgButton( hWndDlg, IDC_MATERIAL2, 0); break; default: CheckDlgButton( hWndDlg, IDC_MATERIAL2, 1); CheckDlgButton( hWndDlg, IDC_MATERIAL1, 0); break; } // setup noise reduction slider SendDlgItemMessage(hWndDlg, IDC_NOISEREDUCTION_SLIDER, TBM_SETRANGE, (WPARAM) TRUE, (LPARAM) MAKELONG(0, 6)); // set noise reduction SetDlgItemInt( hWndDlg, IDC_NOISEREDUCTION, compConfig->NoiseSensitivity, FALSE ); SendDlgItemMessage(hWndDlg, IDC_NOISEREDUCTION_SLIDER, TBM_SETPOS, (WPARAM) TRUE,(LPARAM) compConfig->NoiseSensitivity); SendDlgItemMessage(hWndDlg, IDC_NOISEREDUCTION_SLIDER, TBM_SETTICFREQ, (WPARAM) 1,(LPARAM) 1); // set auto keyframe CheckDlgButton( hWndDlg, IDC_AUTOKEYFRAME_CHECK, (compConfig->AutoKeyFrameEnabled) ? 1 : 0 ); // set max frames btw keys SetDlgItemInt( hWndDlg, IDC_MAXFRAMESBTWKEYS, compConfig->ForceKeyFrameEvery, FALSE ); return (TRUE); } case WM_HSCROLL: { // change edit box to match slider SetDlgItemInt( hWndDlg, IDC_NOISEREDUCTION, SendDlgItemMessage(hWndDlg, IDC_NOISEREDUCTION_SLIDER, TBM_GETPOS, 0,0), FALSE ); return (TRUE); } case WM_DESTROY: //case WM_CLOSE: /* Close the dialog. */ // save everything to our structure compConfig->AutoKeyFrameEnabled = SendDlgItemMessage(hWndDlg, IDC_AUTOKEYFRAME_CHECK, BM_GETCHECK, 0, 0); compConfig->EndUsage = (END_USAGE) SendDlgItemMessage(hWndDlg, IDC_ENDUSAGE2, BM_GETCHECK, 0, 0); compConfig->Interlaced = SendDlgItemMessage(hWndDlg, IDC_MATERIAL1, BM_GETCHECK, 0, 0); compConfig->ForceKeyFrameEvery = GetDlgItemInt(hWndDlg, IDC_MAXFRAMESBTWKEYS, NULL, FALSE ); compConfig->Mode = (MODE) SendDlgItemMessage(hWndDlg, IDD_MODE, CB_GETCURSEL, 0, 0); compConfig->NoiseSensitivity = GetDlgItemInt(hWndDlg, IDC_NOISEREDUCTION, NULL, FALSE ); return (TRUE); case WM_COMMAND: /* A control has been activated. */ { switch(HIWORD(wParam)) { case EN_KILLFOCUS: { // error checking int value = GetDlgItemInt(hWndDlg, LOWORD(wParam), NULL, FALSE ); switch(LOWORD(wParam)) { case IDC_NOISEREDUCTION: { if(value < 0) value = 0; if(value > 6) value = 6; SendDlgItemMessage(hWndDlg, IDC_NOISEREDUCTION_SLIDER, TBM_SETPOS, (WPARAM) TRUE, value ); SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE ); break; } break; case IDC_MAXFRAMESBTWKEYS: { if(value < 0) value = 0; SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE ); break; } default: return (FALSE); } } } return (FALSE); } default: return (FALSE); } /* End of Main Dialog case statement. */ return FALSE; } /* End of WndProc */ BOOL FAR PASCAL Advanced_ParamsDlgProc( HWND hWndDlg, UINT Message, WPARAM wParam, LPARAM lParam) { COMP_CONFIG_VP6 *compConfig = (COMP_CONFIG_VP6 *)GetWindowLong(hWndDlg,GWL_USERDATA); switch(Message) { case WM_INITDIALOG: { SetWindowLong(hWndDlg, GWL_USERDATA, (unsigned long)lParam); compConfig = (COMP_CONFIG_VP6 *) lParam; if ( compConfig->EndUsage == 1) { EnableWindow(GetDlgItem(hWndDlg, IDC_EDIT_MAXBITRATE), 0); EnableWindow(GetDlgItem(hWndDlg, STREAMING_PARAMETERS), 0); EnableWindow(GetDlgItem(hWndDlg, PEAK_BITRATE), 0); EnableWindow(GetDlgItem(hWndDlg, PREBUFFER), 0); EnableWindow(GetDlgItem(hWndDlg, IDC_EDIT_PREBUFFER), 0); EnableWindow(GetDlgItem(hWndDlg, OPTIMAL_BUFFER), 0); EnableWindow(GetDlgItem(hWndDlg, IDC_EDIT_OPTIMAL), 0); EnableWindow(GetDlgItem(hWndDlg, MAX_BUFFER), 0); EnableWindow(GetDlgItem(hWndDlg, IDC_EDIT_MAXBUFFER), 0); } if(compConfig->Mode < 4) { EnableWindow(GetDlgItem(hWndDlg, TWO_PASS_SECTION_DATARATE), 0); EnableWindow(GetDlgItem(hWndDlg, VARIABILITY), 0); EnableWindow(GetDlgItem(hWndDlg, IDC_DATARATEVARIABILITY), 0); EnableWindow(GetDlgItem(hWndDlg, MIN_SECTION), 0); EnableWindow(GetDlgItem(hWndDlg, IDC_EDIT_MINBANDWIDTH), 0); EnableWindow(GetDlgItem(hWndDlg, MAX_SECTION), 0); EnableWindow(GetDlgItem(hWndDlg, IDC_EDIT_MAXBANDWIDTH), 0); } // set buffer stats SetDlgItemInt( hWndDlg, IDC_EDIT_PREBUFFER, compConfig->StartingBufferLevel, FALSE ); SetDlgItemInt( hWndDlg, IDC_EDIT_OPTIMAL, compConfig->OptimalBufferLevel, FALSE ); SetDlgItemInt( hWndDlg, IDC_EDIT_MAXBUFFER, compConfig->MaximumBufferSize, FALSE ); // setup vbr slider SendDlgItemMessage(hWndDlg, IDC_DATARATEVARIABILITY_SLIDER, TBM_SETRANGE, (WPARAM) TRUE, (LPARAM) MAKELONG(0, 100)); SendDlgItemMessage(hWndDlg, IDC_DATARATEVARIABILITY_SLIDER, TBM_SETTICFREQ, (WPARAM) 10,(LPARAM) 10); // set vbr settings SendDlgItemMessage(hWndDlg, IDC_DATARATEVARIABILITY_SLIDER, TBM_SETPOS, (WPARAM) TRUE,(LPARAM) compConfig->TwoPassVBRBias); SetDlgItemInt( hWndDlg, IDC_DATARATEVARIABILITY, compConfig->TwoPassVBRBias, FALSE ); SetDlgItemInt( hWndDlg, IDC_EDIT_MINBANDWIDTH, compConfig->TwoPassVBRMinSection, FALSE ); SetDlgItemInt( hWndDlg, IDC_EDIT_MAXBANDWIDTH, compConfig->TwoPassVBRMaxSection, FALSE ); SetDlgItemInt( hWndDlg, IDC_EDIT_MAXBITRATE, compConfig->MaxAllowedDatarate, FALSE ); // datarate control options SetDlgItemInt( hWndDlg, IDC_EDIT_UNDERSHOOT, compConfig->UnderShootPct, FALSE ); // set adjust quantizer control CheckDlgButton( hWndDlg, IDC_ADJUSTQ_CHECK, (compConfig->FixedQ) ? 0 : 1 ); SetDlgItemInt( hWndDlg, IDC_EDIT_MINQUALITY, compConfig->BestAllowedQ, FALSE ); SetDlgItemInt( hWndDlg, IDC_EDIT_MAXQUALITY, compConfig->Quality, FALSE ); // allowing dropped frames CheckDlgButton( hWndDlg, IDC_ALLOW_DROPPED_FRAMES_CHECK, (compConfig->AllowDF) ? 1 : 0 ); SetDlgItemInt( hWndDlg, IDC_EDIT_TEMPORAL_DOWN, compConfig->DropFramesWaterMark, FALSE ); // allowing spatial resampling CheckDlgButton( hWndDlg, IDC_SCALE_CHECK, (compConfig->AllowSpatialResampling) ? 1 : 0 ); SetDlgItemInt( hWndDlg, IDC_EDIT_SPATIAL_DOWN, compConfig->ResampleDownWaterMark, FALSE ); SetDlgItemInt( hWndDlg, IDC_EDIT_SPATIAL_UP, compConfig->ResampleUpWaterMark, FALSE ); return (TRUE); } case WM_DESTROY: //case WM_CLOSE: /* Close the dialog. */ // save everything to our structure compConfig->StartingBufferLevel = GetDlgItemInt(hWndDlg, IDC_EDIT_PREBUFFER, NULL, FALSE ); compConfig->OptimalBufferLevel = GetDlgItemInt(hWndDlg, IDC_EDIT_OPTIMAL, NULL, FALSE ); compConfig->MaximumBufferSize = GetDlgItemInt(hWndDlg, IDC_EDIT_MAXBUFFER, NULL, FALSE ); compConfig->TwoPassVBRBias = GetDlgItemInt(hWndDlg, IDC_DATARATEVARIABILITY, NULL, FALSE ); compConfig->TwoPassVBRMinSection = GetDlgItemInt(hWndDlg, IDC_EDIT_MINBANDWIDTH, NULL, FALSE ); compConfig->TwoPassVBRMaxSection = GetDlgItemInt(hWndDlg, IDC_EDIT_MAXBANDWIDTH, NULL, FALSE ); compConfig->MaxAllowedDatarate = GetDlgItemInt(hWndDlg, IDC_EDIT_MAXBITRATE, NULL, FALSE ); compConfig->UnderShootPct = GetDlgItemInt(hWndDlg, IDC_EDIT_UNDERSHOOT, NULL, FALSE ); compConfig->FixedQ = !SendDlgItemMessage(hWndDlg, IDC_ADJUSTQ_CHECK, BM_GETCHECK, 0, 0); compConfig->BestAllowedQ = GetDlgItemInt(hWndDlg, IDC_EDIT_MINQUALITY, NULL, FALSE ); compConfig->Quality = GetDlgItemInt(hWndDlg, IDC_EDIT_MAXQUALITY, NULL, FALSE ); compConfig->AllowDF = SendDlgItemMessage(hWndDlg, IDC_ALLOW_DROPPED_FRAMES_CHECK, BM_GETCHECK, 0, 0); compConfig->DropFramesWaterMark = GetDlgItemInt(hWndDlg, IDC_EDIT_TEMPORAL_DOWN, NULL, FALSE ); compConfig->AllowSpatialResampling = SendDlgItemMessage(hWndDlg, IDC_SCALE_CHECK, BM_GETCHECK, 0, 0); compConfig->ResampleDownWaterMark = GetDlgItemInt(hWndDlg, IDC_EDIT_SPATIAL_DOWN, NULL, FALSE ); compConfig->ResampleUpWaterMark = GetDlgItemInt(hWndDlg, IDC_EDIT_SPATIAL_UP, NULL, FALSE ); return (TRUE); case WM_HSCROLL: { // change edit box to match slider SetDlgItemInt( hWndDlg, IDC_DATARATEVARIABILITY, SendDlgItemMessage(hWndDlg, IDC_DATARATEVARIABILITY_SLIDER, TBM_GETPOS, 0,0), FALSE ); return (TRUE); } case WM_COMMAND: /* A control has been activated. */ { switch(HIWORD(wParam)) { case EN_KILLFOCUS: { // error checking int value = GetDlgItemInt(hWndDlg, LOWORD(wParam), NULL, FALSE ); switch(LOWORD(wParam)) { case IDC_DATARATEVARIABILITY: { if(value < 0) value = 0; if(value > 100 ) value = 100; SendDlgItemMessage(hWndDlg, IDC_DATARATEVARIABILITY_SLIDER, TBM_SETPOS, (WPARAM) TRUE, value ); SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE ); break; } // save everything to our structure case IDC_EDIT_PREBUFFER: { if(value < 0) value = 0; if(value > 30 ) value = 30; SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE ); break; } case IDC_EDIT_OPTIMAL: { if(value < 0) value = 0; if(value > 30 ) value = 30; SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE ); break; } case IDC_EDIT_MAXBUFFER: { if(value < 0) value = 0; if(value > 30 ) value = 30; SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE ); break; } case IDC_EDIT_MINBANDWIDTH: { if(value < 0) value = 0; if(value > 100 ) value = 100; SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE ); break; } case IDC_EDIT_MAXBANDWIDTH: { if(value < 100) value = 100; if(value > 1000 ) value = 1000; SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE ); break; } case IDC_EDIT_UNDERSHOOT: { if(value < 50) value = 50; if(value > 100 ) value = 100; SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE ); break; } case IDC_EDIT_MINQUALITY: { if(value < 0) value = 0; if(value > 63 ) value = 63; SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE ); break; } case IDC_EDIT_MAXQUALITY: { if(value < 0) value = 0; if(value > 63 ) value = 63; SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE ); break; } case IDC_EDIT_TEMPORAL_DOWN : { if(value < 0) value = 0; if(value > 100 ) value = 100; SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE ); break; } case IDC_EDIT_SPATIAL_DOWN : { if(value < 0) value = 0; if(value > 100 ) value = 100; SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE ); break; } case IDC_EDIT_SPATIAL_UP : { if(value < 0) value = 0; if(value > 100 ) value = 100; SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE ); break; } } } default: return (FALSE); } return (FALSE); } default: return (FALSE); } /* End of Main Dialog case statement. */ return FALSE; } /* End of WndProc */ BOOL FAR PASCAL Settings_ParamsDlgProc( HWND hWndDlg, UINT Message, WPARAM wParam, LPARAM lParam) { COMP_CONFIG_VP6 *compConfig = (COMP_CONFIG_VP6 *)GetWindowLong(hWndDlg,GWL_USERDATA); switch(Message) { case WM_INITDIALOG: { SetWindowLong(hWndDlg, GWL_USERDATA, (unsigned long)lParam); compConfig = (COMP_CONFIG_VP6 *) lParam; if(!memcmp(compConfig->SettingsFile,compConfig->RootDirectory,strlen(compConfig->RootDirectory))) { strcpy(compConfig->SettingsFile,compConfig->SettingsFile+strlen(compConfig->RootDirectory)); } if(!memcmp(compConfig->SettingsFile+strlen(compConfig->SettingsFile)-4,".vps",4)) { compConfig->SettingsFile[strlen(compConfig->SettingsFile)-4]=0; } SetDlgItemText(hWndDlg,IDC_FIRSTPASS,compConfig->FirstPassFile); SetDlgItemText(hWndDlg,IDC_SETTINGSFILE,compConfig->SettingsFile); WIN32_FIND_DATA wfd; char FileFilter[512]; strncpy(FileFilter,compConfig->RootDirectory,512); strcat(FileFilter,"\\*.vps"); HANDLE ffh = FindFirstFile(FileFilter,&wfd); if( ffh !=INVALID_HANDLE_VALUE) { do { wfd.cFileName[strlen(wfd.cFileName)-4]=0; SendDlgItemMessage(hWndDlg, IDC_SETTINGS_LIST, LB_ADDSTRING, 0, (LPARAM) (LPCSTR) wfd.cFileName); } while ( FindNextFile(ffh,&wfd)); FindClose(ffh); } return (TRUE); } case WM_DESTROY: //case WM_CLOSE: /* Close the dialog. */ // save everything to our structure GetDlgItemText(hWndDlg,IDC_FIRSTPASS,compConfig->FirstPassFile,512); GetDlgItemText(hWndDlg,IDC_SETTINGSFILE,compConfig->SettingsFile,512); if(compConfig->SettingsFile[1] != ':' && compConfig->SettingsFile[1] != '\\') { char tmp[512]; strncpy(tmp,compConfig->SettingsFile,512); strncpy(compConfig->SettingsFile,compConfig->RootDirectory,512); strcat(compConfig->SettingsFile,tmp); } if(compConfig->SettingsFile[strlen(compConfig->SettingsFile)-4] != '.' ) { strcat(compConfig->SettingsFile,".vps"); } return (TRUE); case WM_COMMAND: /* A control has been activated. */ { switch(HIWORD(wParam)) { case LBN_SELCHANGE : { int curSel =SendDlgItemMessage(hWndDlg, IDC_SETTINGS_LIST, LB_GETCURSEL, 0, 0); SendDlgItemMessage(hWndDlg, IDC_SETTINGS_LIST, LB_GETTEXT, curSel, (DWORD) compConfig->SettingsFile); SetDlgItemText(hWndDlg,IDC_SETTINGSFILE,compConfig->SettingsFile); if(compConfig->SettingsFile[1] != ':' && compConfig->SettingsFile[1] != '\\') { char tmp[512]; strncpy(tmp,compConfig->SettingsFile,512); strncpy(compConfig->SettingsFile,compConfig->RootDirectory,512); strcat(compConfig->SettingsFile,"\\"); strcat(compConfig->SettingsFile,tmp); } if(compConfig->SettingsFile[strlen(compConfig->SettingsFile)-4] != '.' ) { strcat(compConfig->SettingsFile,".vps"); } FILE *f = fopen(compConfig->SettingsFile,"rb"); if(f) { char tmp[512]; HWND still = (HWND) compConfig->PlaceHolder; strncpy(tmp,compConfig->RootDirectory,512); fread(compConfig,sizeof COMP_CONFIG_VP6,1,f); strncpy(compConfig->RootDirectory,tmp,512); fclose(f); compConfig->PlaceHolder = (INT32) still; } } case BN_CLICKED: switch(LOWORD(wParam)) { case ID_SAVE: { FILE *f; GetDlgItemText(hWndDlg,IDC_SETTINGSFILE,compConfig->SettingsFile,512); GetDlgItemText(hWndDlg,IDC_FIRSTPASS,compConfig->FirstPassFile,512); if(compConfig->SettingsFile[1] != ':' && compConfig->SettingsFile[1] != '\\') { char tmp[512]; strncpy(tmp,compConfig->SettingsFile,512); strncpy(compConfig->SettingsFile,compConfig->RootDirectory,512); strcat(compConfig->SettingsFile,"\\"); strcat(compConfig->SettingsFile,tmp); } if(compConfig->SettingsFile[strlen(compConfig->SettingsFile)-4] != '.' ) { strcat(compConfig->SettingsFile,".vps"); } f=fopen(compConfig->SettingsFile,"wb"); if(f) { fwrite(compConfig,10+sizeof COMP_CONFIG_VP6,1,f); fclose(f); } int curSel = SendDlgItemMessage(hWndDlg, IDC_SETTINGS_LIST, LB_FINDSTRING, 0, (LPARAM) (LPCSTR) compConfig->SettingsFile ); if( curSel == LB_ERR) { WIN32_FIND_DATA wfd; int curSel = SendDlgItemMessage(hWndDlg, IDC_SETTINGS_LIST, LB_RESETCONTENT, 0, 0 ); char FileFilter[512]; strncpy(FileFilter,compConfig->RootDirectory,512); strcat(FileFilter,"\\*.vps"); HANDLE ffh = FindFirstFile(FileFilter,&wfd); if( ffh !=INVALID_HANDLE_VALUE) { do { wfd.cFileName[strlen(wfd.cFileName)-4]=0; SendDlgItemMessage(hWndDlg, IDC_SETTINGS_LIST, LB_ADDSTRING, 0, (LPARAM) (LPCSTR) wfd.cFileName); } while ( FindNextFile(ffh,&wfd)); FindClose(ffh); } } return TRUE; }; case ID_DELETE: { int curSel =SendDlgItemMessage(hWndDlg, IDC_SETTINGS_LIST, LB_GETCURSEL, 0, 0); SendDlgItemMessage(hWndDlg, IDC_SETTINGS_LIST, LB_DELETESTRING, curSel, 0); DeleteFile(compConfig->SettingsFile); return TRUE; }; case IDC_LOAD_FIRSTPASS: { static TCHAR szFilterLoad[] = TEXT("VP First Pass \0*.vpf\0\0"); OPENFILENAME ofn; TCHAR szTitle[64]; TCHAR szT[256]; ofn.lStructSize= sizeof(ofn); ofn.hInstance= 0; ofn.lpstrFilter= szFilterLoad; ofn.lpstrCustomFilter= NULL; ofn.nMaxCustFilter= 0; ofn.nFilterIndex= 0; ofn.lpstrFileTitle= szTitle; ofn.nMaxFileTitle= sizeof(szTitle); ofn.lpstrInitialDir= compConfig->RootDirectory; ofn.lpstrTitle= NULL; ofn.nFileOffset= 0; ofn.nFileExtension= 0; ofn.lpstrDefExt= "vps"; ofn.lCustData= 0L; ofn.lpfnHook= NULL; ofn.lpTemplateName= NULL; ofn.hwndOwner= hWndDlg; ofn.lpstrFile= szT; ofn.nMaxFile= sizeof(szT); ofn.Flags= 0; szTitle[0] = TEXT('\0'); szT[0] = TEXT('\0'); if(GetOpenFileName(&ofn)) { strncpy(compConfig->FirstPassFile,ofn.lpstrFile,512); SetDlgItemText(hWndDlg,IDC_FIRSTPASS,compConfig->FirstPassFile); } return TRUE; } case IDC_LOAD_SETTINGS: { static TCHAR szFilterLoad[] = TEXT("VP Setting Files\0*.vps\0\0"); OPENFILENAME ofn; TCHAR szTitle[64]; TCHAR szT[256]; ofn.lStructSize= sizeof(ofn); ofn.hInstance= 0; ofn.lpstrFilter= szFilterLoad; ofn.lpstrCustomFilter= NULL; ofn.nMaxCustFilter= 0; ofn.nFilterIndex= 0; ofn.lpstrFileTitle= szTitle; ofn.nMaxFileTitle= sizeof(szTitle); ofn.lpstrInitialDir= compConfig->RootDirectory; ofn.lpstrTitle= NULL; ofn.nFileOffset= 0; ofn.nFileExtension= 0; ofn.lpstrDefExt= "vps"; ofn.lCustData= 0L; ofn.lpfnHook= NULL; ofn.lpTemplateName= NULL; ofn.hwndOwner= hWndDlg; ofn.lpstrFile= szT; ofn.nMaxFile= sizeof(szT); ofn.Flags= 0; szTitle[0] = TEXT('\0'); szT[0] = TEXT('\0'); if(GetOpenFileName(&ofn)) { strncpy(compConfig->SettingsFile,ofn.lpstrFile,512); FILE *f = fopen(compConfig->SettingsFile,"rb"); if(f) { HWND still = (HWND) compConfig->PlaceHolder; fread(compConfig,sizeof COMP_CONFIG_VP6,1,f); fclose(f); compConfig->PlaceHolder = (INT32) still; } if(!memcmp(compConfig->SettingsFile,compConfig->RootDirectory,strlen(compConfig->RootDirectory))) { strcpy(compConfig->SettingsFile,compConfig->SettingsFile+strlen(compConfig->RootDirectory)); } if(!memcmp(compConfig->SettingsFile+strlen(compConfig->SettingsFile)-4,".vps",4)) { compConfig->SettingsFile[strlen(compConfig->SettingsFile)-4]=0; } SetDlgItemText(hWndDlg,IDC_SETTINGSFILE,compConfig->SettingsFile); } return TRUE; } } break; default: break; } } default: return (FALSE); } /* End of Main Dialog case statement. */ return FALSE; } /* End of WndProc */