/***************************************************************************** * * diqeprop.c * * The dialog box that displays effect properties. * *****************************************************************************/ #include "diquick.h" #pragma BEGIN_CONST_DATA CHECKLISTFLAG c_rgclfDieft[] = { { DIEFT_FFATTACK, IDS_FFATTACK, }, { DIEFT_FFFADE, IDS_FFFADE, }, { DIEFT_SATURATION, IDS_SATURATION, }, { DIEFT_POSNEGCOEFFICIENTS, IDS_POSNEGCOEFFICIENTS }, { DIEFT_POSNEGSATURATION, IDS_POSNEGSATURATION, }, }; #pragma END_CONST_DATA /***************************************************************************** * * Effect property dialog instance data * *****************************************************************************/ typedef struct EFFPROPINFO { PDEVDLGINFO pddi; const GUID *rguidEff; } EFFPROPINFO, *PEFFPROPINFO; /***************************************************************************** * * EffProp_OnInitDialog * *****************************************************************************/ BOOL INTERNAL EffProp_OnInitDialog(HWND hdlg, LPARAM lp) { PEFFPROPINFO pepi = (PV)lp; DIEFFECTINFO ei; HRESULT hres; /* * Don't SetDialogPtr until we're finished. This prevents * WM_COMMAND from causing us to do wacky things before * we're ready. */ ei.dwSize = cbX(ei); hres = GetEffectInfo(pepi->pddi, &ei, pepi->rguidEff); if (SUCCEEDED(hres)) { SetWindowText(hdlg, ei.tszName); SetDlgItemText(hdlg, IDC_EPROP_GUID, MapGUID(&ei.guid, ei.tszName)); LoadString(g_hinst, IDS_EFFECT_TYPEARRAY + DIEFT_GETTYPE(ei.dwEffType), ei.tszName, cA(ei.tszName)); if (ei.tszName[0]) { SetDlgItemText(hdlg, IDC_EPROP_TYPE, ei.tszName); } else { SetDlgItemInt(hdlg, IDC_EPROP_TYPE, DIEFT_GETTYPE(ei.dwEffType), 0); } Checklist_InitFlags(hdlg, IDC_EPROP_FLAGS, ei.dwEffType, c_rgclfDieft, cA(c_rgclfDieft)); wsprintf(ei.tszName, TEXT("%08x"), ei.dwStaticParams); SetDlgItemText(hdlg, IDC_EPROP_STATICPARM, ei.tszName); wsprintf(ei.tszName, TEXT("%08x"), ei.dwDynamicParams); SetDlgItemText(hdlg, IDC_EPROP_DYNAMICPARM, ei.tszName); } SetDialogPtr(hdlg, pepi); #if 0 // temp hack to test effect goo _asm int 3 hres = IDirectInputDevice_Acquire(pepi->pddi->pdid); { LPDIRECTINPUTEFFECT peff; hres = IDirectInputDevice2_CreateEffect( pepi->pddi->pdid2, &ei.guid, 0, &peff, 0); if (SUCCEEDED(hres)) { DWORD dw = 3; DIEFFESCAPE esc = { cbX(esc), 0, &dw, 4, &dw, 4 }; peff->lpVtbl->Escape(peff, &esc); // hres = IDirectInputDevice2_EnumCreatedEffects(pdev2, // EnumCallback, 0, 0); peff->lpVtbl->Release(peff); } } hres = IDirectInputDevice_Unacquire(pepi->pddi->pdid); #endif return 1; } /***************************************************************************** * * EffProp_DlgProc * *****************************************************************************/ INT_PTR INTERNAL EffProp_DlgProc(HWND hdlg, UINT wm, WPARAM wp, LPARAM lp) { switch (wm) { case WM_INITDIALOG: return EffProp_OnInitDialog(hdlg, lp); case WM_DESTROY: Checklist_OnDestroy(GetDlgItem(hdlg, IDC_EPROP_FLAGS)); break; case WM_CLOSE: EndDialog(hdlg, TRUE); return TRUE; } return 0; } /***************************************************************************** * * EffProp_Create * * Display info about an effect. * *****************************************************************************/ INT_PTR EXTERNAL EffProp_Create(HWND hdlg, PDEVDLGINFO pddi, REFGUID rguidEff) { EFFPROPINFO epi; epi.pddi = pddi; epi.rguidEff = rguidEff; return DialogBoxParam(g_hinst, MAKEINTRESOURCE(IDD_EFFPROP), hdlg, EffProp_DlgProc, (LPARAM)&epi); }