You need to tell TGClient that the widget has changed with
NeddRedraw(...).
So your code becomes:
----
switch(GET_MSG(msg)) {
case kC_COMMAND:
switch(GET_SUBMSG(msg)) {
case kCM_BUTTON:
SetWindowAttributes_t wattr;
switch(parm1) {
case 1:
wattr.fMask = kWABackPixel;
gClient->GetColorByName("blue",wattr.fBackgroundPixel);
gGXW->ChangeWindowAttributes(fTestButton->GetId(),&wattr);
gClient->NeedRedraw(fTestButton);
break;
case 2:
wattr.fMask = kWABackPixel;
gClient->GetColorByName("red",wattr.fBackgroundPixel);
gGXW->ChangeWindowAttributes(fTestButton->GetId(),&wattr);
gClient->NeedRedraw(fTestButton);
break;
}
break;
case kCM_RADIOBUTTON:
etc...
------
(had to move SetWindowAttributes_t wattr; outside case statement.
Cheers,
Rutger