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.