BOOL CTreeOptionsCtrlEx::SetRadioButton(HTREEITEM hParent, int nIndex) { //Validate our parameters ASSERT(IsGroup(hParent)); //Parent item must be a group item //Iterate through the child items and turn on the specified one and turn off all the other ones HTREEITEM hChild = GetNextItem(hParent, TVGN_CHILD); //Turn of redraw to Q all the changes we're going to make here SetRedraw(FALSE); int i=0; BOOL bCheckedSomeItem = FALSE; while (hChild) { //if we reach a non radio button then break out of the loop if (!IsRadioButton(hChild)) break; if (i == nIndex) { //Turn this item on BOOL bOldState; GetRadioButton(hChild, bOldState); VERIFY(SetItemImage(hChild, 3, 3)); bCheckedSomeItem = TRUE; if (!bOldState) NotifyParent(BN_CLICKED, hChild); } else { BOOL bEnable; VERIFY(GetRadioButtonEnable(hChild, bEnable)); //Turn this item off if (bEnable) VERIFY(SetItemImage(hChild, 2, 2)); else VERIFY(SetItemImage(hChild, 4, 4)); } //Move on to the next item hChild = GetNextItem(hChild, TVGN_NEXT); ++i; } ASSERT(bCheckedSomeItem); //You specified an index which does not exist //Reset the redraw flag SetRedraw(TRUE); return TRUE; }
BOOL CTreeOptionsCtrlEx::SetRadioButton(HTREEITEM hItem) { //Validate our parameters ASSERT(IsRadioButton(hItem)); //Must be a radio item to check it //Iterate through the sibling items and turn them all off except this one HTREEITEM hParent = GetNextItem(hItem, TVGN_PARENT); ASSERT(IsGroup(hParent)); //Parent item must be a group item //Iterate through the child items and turn on the specified one and turn off all the other ones HTREEITEM hChild = GetNextItem(hParent, TVGN_CHILD); //Turn of redraw to Q all the changes we're going to make here SetRedraw(FALSE); while (hChild) { //if we reach a non radio button then break out of the loop if (!IsRadioButton(hChild)) break; if (hChild == hItem) { //Turn this item on BOOL bOldState; GetRadioButton(hChild, bOldState); BOOL bSuccess = SetItemImage(hChild, 3, 3); ASSERT(bSuccess); if (!bOldState) NotifyParent(BN_CLICKED, hChild); } else { BOOL bEnable; VERIFY(GetRadioButtonEnable(hChild, bEnable)); //Turn this item off if (bEnable) VERIFY(SetItemImage(hChild, 2, 2)); else VERIFY(SetItemImage(hChild, 6, 6)); } //Move on to the next item hChild = GetNextItem(hChild, TVGN_NEXT); } //Reset the redraw flag SetRedraw(TRUE); return TRUE; }