Useful function: EnableWindowsDependingOn
Monday, March 21st, 2011One of my favorite internal functions. It helps my manage my app’s GUI. Checkboxes that cause their sub-elements to be greyed out when not checked can be easily handled by this:
bool EnableWindowsDependingOn (CWnd *pParent, DWORD DependingOnThisCheckbox, DWORD Value1, ...) { va_list marker; bool bState = (((CButton*)pParent->GetDlgItem(DependingOnThisCheckbox))->GetCheck()!=0); DWORD i=Value1; va_start (marker, Value1); while (i != 0) { if (i<=0xffff) { if (pParent->GetDlgItem(i)) pParent->GetDlgItem(i)->EnableWindow (bState); } else ((CWnd*)i)->EnableWindow (bState); i = va_arg (marker, long); } va_end (marker); return (bState); }
It accepts the “this-pointer” of your CDialog and the id of the master checkbox. Then you can append any number of sub-element ids or pointers. And finally a NULL. Example:
EnableWindowsDependingOn (this, IDC_CHECK1, IDC_EDIT1, IDC_EDIT2, NULL);
This would enable the two edit boxes if the checkbox is enabled.