use Win32::GUI; $BS_GROUPBOX = 7; sub AutoFormCheckboxGroup { my($pWnd) = shift(@_); my($bRadio) = shift(@_); my($sName) = shift(@_); my($nLeft) = shift(@_); my($nTop) = shift(@_); my($sText) = shift(@_); my($nMaxLength) = length($sName) + 2; for (my $i = 1 ; $i < scalar(@_) ; $i += 2) { if (length($_[$i]) > $nMaxLength) { $nMaxLength = length($_[$i]); } } my($nWidth) = ($nMaxLength * $g_nHorzCharSize) + $g_nHorzSpacing * 2; my($nHeight) = (scalar(@_) / 2 + 1) * ($g_nVertSpacing + $g_nVertCharSize) + $g_nVertSpacing; FormCheckboxGroup($pWnd, $bRadio, $sName, $nLeft, $nTop, $nWidth, $nHeight, $sText, @_); } # pWnd, bRadio, sName, nLeft, nTop, nWidth, nHeight, sText, [cbx1name, cbx1text], [...] sub FormCheckboxGroup { my($pWnd) = shift(@_); my($bRadio) = shift(@_); my($sName) = shift(@_); my($nLeft) = shift(@_); my($nTop) = shift(@_); my($nWidth) = shift(@_); my($nHeight) = shift(@_); my($sText) = shift(@_); if (scalar(@_) % 2 == 1) { print(STDERR "bad windows dimensions\n"); return(0); } $pWnd->AddButton( -name => $sName, -left => $nLeft, -top => $nTop, -width => $nWidth, -height => $nHeight, -text => $sText, -style => WS_VISIBLE | WS_CHILD | $BS_GROUPBOX, ); for (my $i = 0 ; $i < scalar(@_) ; $i += 2) { if ($bRadio) { $W->AddRadioButton( -name => $_[$i], -left => $nLeft + $g_nHorzSpacing, -top => $nTop + ((($i / 2) + 1) * ($g_nVertSpacing + $g_nVertCharSize)), -text => $_[$i + 1]." ", ); } else { $W->AddCheckbox( -name => $_[$i], -left => $nLeft + $g_nHorzSpacing, -top => $nTop + ((($i / 2) + 1) * ($g_nVertSpacing + $g_nVertCharSize)), -text => $_[$i + 1]." ", ); } } if ($_[0] && $bRadio) { $pWnd->{$_[0]}->Checked(1); } }