#include "MagneticWindowsCore.h" HANDLE hInitOptionsHook; TOptions Options = { true, cDefaultSnapWidth, false }; INT_PTR CALLBACK OptionsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: { TranslateDialogDefault(hwndDlg); CheckDlgButton(hwndDlg, IDC_CHK_SNAP, Options.DoSnap?BST_CHECKED:BST_UNCHECKED); SendDlgItemMessage(hwndDlg, IDC_SLIDER_SNAPWIDTH, TBM_SETRANGE, FALSE, MAKELONG(1,32)); SendDlgItemMessage(hwndDlg, IDC_SLIDER_SNAPWIDTH, TBM_SETPOS, TRUE, Options.SnapWidth); TCHAR str[64]; mir_sntprintf(str, SIZEOF(str),TranslateT("%d pix"), Options.SnapWidth); SetDlgItemText(hwndDlg, IDC_TXT_SNAPWIDTH, str); EnableWindow(GetDlgItem(hwndDlg, IDC_SLIDER_SNAPWIDTH), Options.DoSnap); EnableWindow(GetDlgItem(hwndDlg, IDC_TXT_SNAPWIDTH), Options.DoSnap); CheckDlgButton(hwndDlg, IDC_CHK_SCRIVERWORKAROUND, Options.ScriverWorkAround?BST_CHECKED:BST_UNCHECKED); break; } case WM_HSCROLL: { TCHAR str[64]; mir_sntprintf(str, SIZEOF(str), TranslateT("%d pix"), SendDlgItemMessage(hwndDlg, IDC_SLIDER_SNAPWIDTH, TBM_GETPOS, 0, 0)); SetDlgItemText(hwndDlg, IDC_TXT_SNAPWIDTH, str); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; } case WM_COMMAND: { WORD idCtrl = LOWORD(wParam), wNotifyCode = HIWORD(wParam); switch(idCtrl) { case IDC_CHK_SNAP: { if (wNotifyCode == BN_CLICKED) { EnableWindow(GetDlgItem(hwndDlg, IDC_SLIDER_SNAPWIDTH), IsDlgButtonChecked(hwndDlg, IDC_CHK_SNAP)); EnableWindow(GetDlgItem(hwndDlg, IDC_TXT_SNAPWIDTH), IsDlgButtonChecked(hwndDlg, IDC_CHK_SNAP)); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } break; } case IDC_CHK_SCRIVERWORKAROUND: { if (wNotifyCode == BN_CLICKED) { SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } break; } } break; } case WM_NOTIFY: { //Here we have pressed either the OK or the APPLY button. switch(((LPNMHDR)lParam)->idFrom) { case 0: switch (((LPNMHDR)lParam)->code) { case PSN_RESET: LoadOptions(); break; case PSN_APPLY: { Options.DoSnap = (IsDlgButtonChecked(hwndDlg, IDC_CHK_SNAP) == TRUE); Options.SnapWidth = SendDlgItemMessage(hwndDlg, IDC_SLIDER_SNAPWIDTH, TBM_GETPOS, 0, 0); Options.ScriverWorkAround = (IsDlgButtonChecked(hwndDlg, IDC_CHK_SCRIVERWORKAROUND) == TRUE); db_set_b(NULL, MODULE_NAME, "DoSnap", Options.DoSnap); db_set_b(NULL, MODULE_NAME, "SnapWidth", Options.SnapWidth); db_set_b(NULL, MODULE_NAME, "ScriverWorkAround", Options.ScriverWorkAround); break; } } break; } break; } default: break; } return 0; } int InitOptions(WPARAM wParam, LPARAM) { OPTIONSDIALOGPAGE Opt = { 0 }; Opt.cbSize = sizeof(Opt); Opt.pfnDlgProc = OptionsDlgProc; Opt.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_MAGNETICWINDOWS); Opt.hInstance = hInst; Opt.pszGroup = LPGEN("Customize"); Opt.pszTitle = LPGEN("Magnetic Windows"); Opt.flags = ODPF_BOLDGROUPS; Options_AddPage(wParam, &Opt); return 0; } void LoadOptions() { Options.DoSnap = db_get_b(NULL, MODULE_NAME, "DoSnap", 1) != 0; Options.SnapWidth = db_get_b(NULL, MODULE_NAME, "SnapWidth", cDefaultSnapWidth); Options.ScriverWorkAround = db_get_b(NULL, MODULE_NAME, "ScriverWorkAround", 0) != 0; }