VC++ 两种动态调整控件位置的方法(CButton设置为Radio形式会出现错误)

时间:2021-09-03 23:03:32
         ((CButton*)GetDlgItem(IDC_CHECK1))->MoveWindow(, cy - , , );
((CButton*)GetDlgItem(IDC_CHECK2))->MoveWindow(, cy - , , );
((CButton*)GetDlgItem(IDC_CHECK3))->MoveWindow(, cy - , , );
((CButton*)GetDlgItem(IDC_CHECK4))->MoveWindow(, cy - , , );
((CButton*)GetDlgItem(IDC_CHECK5))->MoveWindow(, cy - , , );
((CButton*)GetDlgItem(IDC_CHECK6))->MoveWindow(, cy - , , ); ((CStatic*)GetDlgItem(IDC_STATIC1))->SetWindowPos(NULL, , cy - , cx - , , SWP_NOZORDER);
((CStatic*)GetDlgItem(IDC_STATIC2))->SetWindowPos(NULL, , cy - , cx - , , SWP_NOZORDER);
((CStatic*)GetDlgItem(IDC_STATIC3))->SetWindowPos(NULL, , cy - , cx - , , SWP_NOZORDER);
((CStatic*)GetDlgItem(IDC_STATIC4))->SetWindowPos(NULL, , cy - , cx - , , SWP_NOZORDER);
((CStatic*)GetDlgItem(IDC_STATIC5))->SetWindowPos(NULL, , cy - , cx - , , SWP_NOZORDER);
((CStatic*)GetDlgItem(IDC_STATIC6))->SetWindowPos(NULL, , cy - , cx - , , SWP_NOZORDER);

最近发现,使用第二种访求,也就是 SetWindowPos 方法时,会出现一个奇怪的问题 CButton如果转换成 Radio类型的控件时,会出现Group组的设置会出现一些错误。导致设置成Group为True的控件与其它的不成一组。

另附:

将CButton控件设置为Radio形式的方法是:

            ((CButton*)GetDlgItem(IDC_CHECK1))->ModifyStyle(BS_AUTOCHECKBOX, BS_AUTORADIOBUTTON | WS_GROUP, );
((CButton*)GetDlgItem(IDC_CHECK1))->Invalidate();
((CButton*)GetDlgItem(IDC_CHECK2))->ModifyStyle(BS_AUTOCHECKBOX, BS_AUTORADIOBUTTON, );
((CButton*)GetDlgItem(IDC_CHECK2))->Invalidate();
((CButton*)GetDlgItem(IDC_CHECK3))->ModifyStyle(BS_AUTOCHECKBOX, BS_AUTORADIOBUTTON, );
((CButton*)GetDlgItem(IDC_CHECK3))->Invalidate();
((CButton*)GetDlgItem(IDC_CHECK4))->ModifyStyle(BS_AUTOCHECKBOX, BS_AUTORADIOBUTTON, );
((CButton*)GetDlgItem(IDC_CHECK4))->Invalidate();
((CButton*)GetDlgItem(IDC_CHECK5))->ModifyStyle(BS_AUTOCHECKBOX, BS_AUTORADIOBUTTON, );
((CButton*)GetDlgItem(IDC_CHECK5))->Invalidate();
((CButton*)GetDlgItem(IDC_CHECK6))->ModifyStyle(BS_AUTOCHECKBOX, BS_AUTORADIOBUTTON, );
((CButton*)GetDlgItem(IDC_CHECK6))->Invalidate();

注意上面的 WS_GROUP 控件样式!