public static void GetCheckRectAndTextRect(Rectangle rect, int paddingWidth, int checkWidth, int diffSpace,
            CheckMarkAlignment checkAlign, string text, Font font, out Rectangle rectCheck, out Rectangle rectText)
        {
            rectCheck = Rectangle.Empty;
            rectText = Rectangle.Empty;
            Size textSize = System.Windows.Forms.TextRenderer.MeasureText(text, font);

            if (checkAlign == CheckMarkAlignment.Left)
            {
                rectCheck = new Rectangle(rect.Left + paddingWidth,
                    rect.Top + (rect.Height - checkWidth) / 2,
                    checkWidth, checkWidth);
                rectText = new Rectangle(rectCheck.Right + diffSpace,
                    rect.Top + (rect.Height - textSize.Height) / 2 + 1, // 这里加1是为了使radio-mark 与 text 看起来更协调
                    textSize.Width, textSize.Height);
                if (rectCheck.Right > rect.Right)
                {
                    int w = rectCheck.Width - (rectCheck.Right - rect.Right);
                    rectCheck.Width = w < 0 ? 0 : w;
                }
                if (rectText.Right > rect.Right)
                {
                    int w = rectText.Width - (rectText.Right - rect.Right);
                    rectText.Width = w < 0 ? 0 : w;
                }
            }
            else
            {
                rectCheck = new Rectangle(rect.Right - paddingWidth - checkWidth,
                    rect.Top + (rect.Height - checkWidth) / 2,
                    checkWidth, checkWidth);
                rectText = new Rectangle(rectCheck.Left - diffSpace - textSize.Width,
                    rect.Top + (rect.Height - textSize.Height) / 2 + 1,
                    textSize.Width, textSize.Height);
                if (rectCheck.Left < rect.Left)
                {
                    int w = rectCheck.Width - (rect.Left - rectCheck.Left);
                    rectCheck.X = rect.Left;
                    rectCheck.Width = w < 0 ? 0 : w;
                }
                if (rectText.Left < rect.Left)
                {
                    int w = rectText.Width - (rect.Left - rectText.Left);
                    rectText.X = rect.Left;
                    rectText.Width = w < 0 ? 0 : w;
                }
            }
        }
        public static void RenderRadioButton(Graphics g, Rectangle rect, SmartRadioButtonThemeBase xtheme,
            bool enable, bool selected, SmartButtonState state, string text,
            CheckMarkAlignment markAlign, bool drawFocus)
        {
            Rectangle rectMark, rectText;

            GetCheckRectAndTextRect(
                rect,
                xtheme.InnerPaddingWidth,
                xtheme.RadioMarkWidth,
                xtheme.SpaceBetweenMarkAndText,
                markAlign,
                text,
                xtheme.TextFont,
                out rectMark,
                out rectText);

            RadioMarkPainter.RenderRadioMark(
                g,
                rectMark,
                xtheme,
                enable,
                selected,
                state);
            System.Windows.Forms.TextRenderer.DrawText(
                g,
                text,
                xtheme.TextFont,
                rectText,
                enable ? xtheme.TextColor : xtheme.TextColorDisabled,
                TextFormatFlags.Left | TextFormatFlags.VerticalCenter);
            if (drawFocus)
                BasicBlockPainter.RenderFocusRect(g, rectText, 0);

            //rectMark.Width--;
            //rectMark.Height--;
            //g.DrawRectangle(Pens.Red, rectMark);

            //rectText.Width--;
            //rectText.Height--;
            //g.DrawRectangle(Pens.Blue, rectText);

            //rect.Width--;
            //rect.Height--;
            //g.DrawRectangle(Pens.Black, rect);
        }
        public static void RenderCheckButton(Graphics g, Rectangle rect, SmartCheckBoxThemeBase xtheme,
            bool enable, CheckState checkState, SmartButtonState state, string text,
            CheckMarkAlignment checkAlign, bool drawFocus)
        {
            Rectangle rectCheck, rectText;

            RadioButtonPainter.GetCheckRectAndTextRect(
                rect,
                xtheme.InnerPaddingWidth,
                xtheme.CheckRectWidth,
                xtheme.SpaceBetweenCheckMarkAndText,
                checkAlign,
                text,
                xtheme.TextFont,
                out rectCheck,
                out rectText);

            CheckRectPainter.RenderCheckRect(
                g,
                rectCheck,
                xtheme,
                enable,
                checkState,
                state);

            rectText.Offset(0, -1);
            TextRenderer.DrawText(
                g,
                text,
                xtheme.TextFont,
                rectText,
                enable ? xtheme.TextColor : xtheme.TextColorDisabled,
                TextFormatFlags.Left);

            if (drawFocus)
                BasicBlockPainter.RenderFocusRect(g, rectText, 0);
        }