www.pudn.com > gspmidi101src.zip > dialog.cpp
#include "gspmidi.h" #include "config.h" #include "commctrl.h" #ifdef _WIN32_WCE #include "wce\resource.h" #include "wce\wcehelper.h" #else #include "win32\resource.h" #endif #includeextern HINSTANCE g_hInst; extern BOOL g_fUpdateConfig; extern TCHAR g_szConfigFile[MAX_PATH]; extern int g_nSampleRate; extern int g_nBitsPerSample; extern int g_nChannels; extern int g_nVoices; extern int g_nAmp; extern BOOL g_fAdjustPanning; extern BOOL g_fFreeInst; extern BOOL g_fAntialiasing; const int s_nSampleRate[] = {8000, 11025, 16000, 22050, 32000, 44100, 48000, 0}; BOOL ConfigDialogOnInitDialog(HWND hwndDlg) { int i, n; TCHAR sz[MAX_PATH]; SetWindowText(GetDlgItem(hwndDlg, IDC_EDIT_CONFIG), g_szConfigFile); for (i = 0; s_nSampleRate[i]; i++) { wsprintf(sz, _T("%d"), s_nSampleRate[i]); n = SendMessage(GetDlgItem(hwndDlg, IDC_CMB_RATE), CB_ADDSTRING, 0, (LPARAM)sz); if (s_nSampleRate[i] == g_nSampleRate) SendMessage(GetDlgItem(hwndDlg, IDC_CMB_RATE), CB_SETCURSEL, n, 0); } SendMessage(GetDlgItem(hwndDlg, IDC_SPIN_VOICES), UDM_SETRANGE32, 1, MAX_VOICES); SendMessage(GetDlgItem(hwndDlg, IDC_SPIN_VOICES), UDM_SETPOS, 0, MAKELONG((short)g_nVoices, 0)); SendMessage(GetDlgItem(hwndDlg, IDC_SPIN_AMP), UDM_SETRANGE32, 0, MAX_AMPLIFICATION); SendMessage(GetDlgItem(hwndDlg, IDC_SPIN_AMP), UDM_SETPOS, 0, MAKELONG((short)g_nAmp, 0)); if (g_nBitsPerSample == 16) SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_16BITS), BM_SETCHECK, 1, 0); if (g_nChannels == 2) SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_STEREO), BM_SETCHECK, 1, 0); if (g_fAdjustPanning) SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_PAN), BM_SETCHECK, 1, 0); if (g_fFreeInst) SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_FREEINST), BM_SETCHECK, 1, 0); if (g_fAntialiasing) SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_ANTIALIAS), BM_SETCHECK, 1, 0); return TRUE; } BOOL ConfigDialogOnOK(HWND hwndDlg) { int n; TCHAR sz[MAX_PATH]; GetWindowText(GetDlgItem(hwndDlg, IDC_EDIT_CONFIG), g_szConfigFile, MAX_PATH); GetWindowText(GetDlgItem(hwndDlg, IDC_CMB_RATE), sz, MAX_PATH); g_nSampleRate = _tcstol(sz, NULL, 10); GetWindowText(GetDlgItem(hwndDlg, IDC_EDIT_VOICES), sz, MAX_PATH); n = _tcstol(sz, NULL, 10); if (n >= 1 && n <= MAX_VOICES) g_nVoices = n; GetWindowText(GetDlgItem(hwndDlg, IDC_EDIT_AMP), sz, MAX_PATH); n = _tcstol(sz, NULL, 10); if (n <= MAX_AMPLIFICATION) g_nAmp = n; if (SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_16BITS), BM_GETCHECK, 0, 0)) g_nBitsPerSample = 16; else g_nBitsPerSample = 8; if (SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_STEREO), BM_GETCHECK, 0, 0)) g_nChannels = 2; else g_nChannels = 1; if (SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_PAN), BM_GETCHECK, 0, 0)) g_fAdjustPanning = TRUE; else g_fAdjustPanning = FALSE; if (SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_FREEINST), BM_GETCHECK, 0, 0)) g_fFreeInst = TRUE; else g_fFreeInst = FALSE; if (SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_ANTIALIAS), BM_GETCHECK, 0, 0)) g_fAntialiasing = TRUE; else g_fAntialiasing = FALSE; g_fUpdateConfig = TRUE; EndDialog(hwndDlg, IDOK); return TRUE; } BOOL ConfigDialogOnBrowse(HWND hwndDlg) { TCHAR szFile[MAX_PATH]; TCHAR szFilter[MAX_PATH]; TCHAR szInitDir[MAX_PATH]; LPTSTR psz; BOOL fRet; *szFile = NULL; LoadString(g_hInst, IDS_FILTER, szFilter, MAX_PATH); psz = szFilter; while (psz = _tcschr(psz, _T('|'))) { *psz++ = NULL; } _tcscpy(szInitDir, g_szConfigFile); psz = _tcsrchr(szInitDir, _T('\\')); if (psz) *psz = NULL; OPENFILENAME ofn; memset(&(ofn), 0, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hwndDlg; ofn.lpstrFile = szFile; ofn.nMaxFile = MAX_PATH; ofn.lpstrFilter = szFilter; ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; ofn.lpstrInitialDir = szInitDir; #ifdef _WIN32_WCE BOOL (*gsGetOpenFileName)(OPENFILENAME*) = NULL; HINSTANCE hInst = LoadLibrary(_T("gsgetfile.dll")); if (hInst) { (FARPROC&)gsGetOpenFileName = GetProcAddress(hInst, _T("gsGetOpenFileName")); } if (gsGetOpenFileName) fRet = gsGetOpenFileName(&ofn); else fRet = GetOpenFileName(&ofn); if (hInst) FreeLibrary(hInst); #else fRet = GetOpenFileName(&ofn); #endif if (fRet) SetDlgItemText(hwndDlg, IDC_EDIT_CONFIG, szFile); return TRUE; } BOOL CALLBACK ConfigDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { #ifdef _WIN32_WCE static CWinceHelper* pHelper; #endif switch (uMsg) { case WM_INITDIALOG: #ifdef _WIN32_WCE pHelper = (CWinceHelper*)lParam; if (pHelper->IsPocketPC()) pHelper->SHInitDialog(hwndDlg); #endif return ConfigDialogOnInitDialog(hwndDlg); case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: return ConfigDialogOnOK(hwndDlg); case IDCANCEL: EndDialog(hwndDlg, LOWORD(wParam)); return TRUE; case IDC_BROWSE: return ConfigDialogOnBrowse(hwndDlg); case IDC_ABOUT: { TCHAR sz[MAX_PATH]; LoadString(g_hInst, IDS_ABOUT, sz, MAX_PATH); MessageBox(hwndDlg, sz, _T("About"), MB_OK | MB_ICONINFORMATION); } return TRUE; } #ifdef _WIN32_WCE case WM_PAINT: return pHelper->DefDlgPaintProc(hwndDlg, wParam, lParam); case WM_CTLCOLORSTATIC: return pHelper->DefDlgCtlColorStaticProc(hwndDlg, wParam, lParam); #endif } return FALSE; } void ShowConfigDialog(HWND hwndParent) { #ifdef _WIN32_WCE CWinceHelper helper; if (helper.IsPocketPC()) DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_CONFIG_PPC), hwndParent, ConfigDialogProc, (LPARAM)&helper); else DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_CONFIG), hwndParent, ConfigDialogProc, (LPARAM)&helper); #else DialogBox(g_hInst, MAKEINTRESOURCE(IDD_CONFIG), hwndParent, ConfigDialogProc); #endif }