Esempio n. 1
0
        protected override void DoPaint(HCStyle aStyle, RECT aDrawRect, int aDataDrawTop, int aDataDrawBottom,
                                        int aDataScreenTop, int aDataScreenBottom, HCCanvas aCanvas, PaintInfo aPaintInfo)
        {
            base.DoPaint(aStyle, aDrawRect, aDataDrawTop, aDataDrawBottom, aDataScreenTop, aDataScreenBottom,
                         aCanvas, aPaintInfo);

            RECT vBoxRect = GetBoxRect();

            HC.OffsetRect(ref vBoxRect, aDrawRect.Left, aDrawRect.Top);

            if (aPaintInfo.Print)
            {
                if (FChecked)
                {
                    HC.HCDrawFrameControl(aCanvas, vBoxRect, HCControlState.hcsChecked, HCControlStyle.hcyCheck);
                }
                else
                {
                    HC.HCDrawFrameControl(aCanvas, vBoxRect, HCControlState.hcsCustom, HCControlStyle.hcyCheck);
                }
            }
            else
            {
                if (this.IsSelectComplate)
                {
                    aCanvas.Brush.Color = aStyle.SelColor;
                    aCanvas.FillRect(aDrawRect);
                }
                else
                if (FMouseIn)
                {
                    aCanvas.Brush.Color = HC.clBtnFace;
                    aCanvas.FillRect(aDrawRect);
                }

                if (FChecked)
                {
                    aCanvas.Brush.Style = HCBrushStyle.bsSolid;
                    User.DrawFrameControl(aCanvas.Handle, ref vBoxRect, Kernel.DFC_MENU, Kernel.DFCS_CHECKED | Kernel.DFCS_MENUCHECK);
                }

                HC.HCDrawFrameControl(aCanvas, vBoxRect, HCControlState.hcsCustom, HCControlStyle.hcyCheck);
            }

            aCanvas.Brush.Style = HCBrushStyle.bsClear;
            aStyle.TextStyles[TextStyleNo].ApplyStyle(aCanvas, aPaintInfo.ScaleY / aPaintInfo.Zoom);
            if (FBoxRight)
            {
                aCanvas.TextOut(aDrawRect.Left, aDrawRect.Top + (Height - aCanvas.TextHeight("H")) / 2, FText);
            }
            else
            {
                aCanvas.TextOut(aDrawRect.Left + FPaddingLeft + CheckBoxSize + FPaddingLeft, aDrawRect.Top + (Height - aCanvas.TextHeight("H")) / 2, FText);
            }
        }
Esempio n. 2
0
        public void ApplyStyle(HCCanvas aCanvas, Single aScale = 1)
        {
            if (FBackColor == HC.HCTransparentColor)
            {
                aCanvas.Brush.Style = HCBrushStyle.bsClear;
            }
            else
            {
                aCanvas.Brush.Color = FBackColor;
            }

            aCanvas.Font.BeginUpdate();
            try
            {
                aCanvas.Font.Color  = FColor;
                aCanvas.Font.Family = FFamily;
                if ((FFontStyles.Contains((byte)HCFontStyle.tsSuperscript)) || (FFontStyles.Contains((byte)HCFontStyle.tsSubscript)))
                {
                    aCanvas.Font.Size = FSize / 2;
                }
                else
                {
                    aCanvas.Font.Size = FSize;
                }

                aCanvas.Font.FontStyles.Value = FFontStyles.Value;  // 防止后面其他地方修改canva的font时影响到原始的样式数据
            }
            finally
            {
                aCanvas.Font.EndUpdate();
            }

            TEXTMETRICW vTextMetric = new TEXTMETRICW();

            aCanvas.GetTextMetrics(ref vTextMetric);
            FTextMetric_tmAveCharWidth    = vTextMetric.tmAveCharWidth;
            FTextMetric_tmExternalLeading = vTextMetric.tmExternalLeading;
            FTextMetric_tmHeight          = vTextMetric.tmHeight;

            FONTSIGNATURE vFontSignature = new FONTSIGNATURE();

            FFontHeight = aCanvas.TextHeight("H");

            if ((GDI.GetTextCharsetInfo(aCanvas.Handle, ref vFontSignature, 0) != GDI.DEFAULT_CHARSET) &&
                ((vFontSignature.fsCsb[0] & CJK_CODEPAGE_BITS) != 0))
            {
                FCJKFont = true;
            }
            else
            {
                FCJKFont = false;
            }

            FOutMetSize = GDI.GetOutlineTextMetrics(aCanvas.Handle, 0, IntPtr.Zero);
            if (FOutMetSize != 0)
            {
                //FOutMetSize = (uint)Marshal.SizeOf(FOutlineTextmetric);
                IntPtr vOutlineTextmetricPtr = Marshal.AllocHGlobal((int)FOutMetSize);
                try
                {
                    if (GDI.GetOutlineTextMetrics(aCanvas.Handle, FOutMetSize, vOutlineTextmetricPtr) != 0)
                    {
                        //FOutlineTextmetric = new OUTLINETEXTMETRICW();
                        //FOutlineTextmetric = (OUTLINETEXTMETRICW)Marshal.PtrToStructure(FOutlineTextmetricPtr, typeof(OUTLINETEXTMETRICW));
                        //string otmpFamilyName = Marshal.PtrToStringUni(new IntPtr((int)FOutlineTextmetricPtr + (int)FOutlineTextmetric.otmpFamilyName));
                        //string otmpFaceName = Marshal.PtrToStringUni(new IntPtr((int)FOutlineTextmetricPtr + (int)FOutlineTextmetric.otmpFaceName)); ;
                        //string otmpStyleName = Marshal.PtrToStringUni(new IntPtr((int)FOutlineTextmetricPtr + (int)FOutlineTextmetric.otmpStyleName)); ;
                        //string otmpFullName = Marshal.PtrToStringUni(new IntPtr((int)FOutlineTextmetricPtr + (int)FOutlineTextmetric.otmpFullName)); ;
                        // 以上为参考代码
                        //Marshal.PtrToStructure(FOutlineTextmetricPtr, FOutlineTextmetric);
                        OUTLINETEXTMETRICW vOutlineTextmetric = (OUTLINETEXTMETRICW)Marshal.PtrToStructure(vOutlineTextmetricPtr, typeof(OUTLINETEXTMETRICW));
                        FOutlineTextmetric_otmfsSelection = vOutlineTextmetric.otmfsSelection;
                        FOutlineTextmetric_otmAscent      = vOutlineTextmetric.otmAscent;
                        FOutlineTextmetric_otmDescent     = vOutlineTextmetric.otmDescent;
                        FOutlineTextmetric_otmEMSquare    = vOutlineTextmetric.otmEMSquare;
                    }
                }
                finally
                {
                    Marshal.FreeHGlobal(vOutlineTextmetricPtr);
                }
            }

            TT_HHEA vFontHeader = new TT_HHEA();

            if ((uint)GDI.GetFontData(aCanvas.Handle, MS_HHEA_TAG, 0, ref vFontHeader, Marshal.SizeOf(vFontHeader)) != GDI.GDI_ERROR)
            {
                FFontHeader_Ascender  = vFontHeader.Ascender;
                FFontHeader_Descender = vFontHeader.Descender;
            }
            else
            {
                FFontHeader_Ascender  = 0;
                FFontHeader_Descender = 0;
            }
        }
Esempio n. 3
0
 public static int GetFontHeight(HCCanvas ACanvas)
 {
     return(ACanvas.TextHeight("H"));
 }
Esempio n. 4
0
        public void ApplyStyle(HCCanvas aCanvas, Single aScale = 1)
        {
            if (FBackColor == HC.HCTransparentColor)
            {
                aCanvas.Brush.Style = HCBrushStyle.bsClear;
            }
            else
            {
                aCanvas.Brush.Color = FBackColor;
            }

            aCanvas.Font.BeginUpdate();
            try
            {
                aCanvas.Font.Color  = FColor;
                aCanvas.Font.Family = FFamily;
                if ((FFontStyles.Contains((byte)HCFontStyle.tsSuperscript)) || (FFontStyles.Contains((byte)HCFontStyle.tsSubscript)))
                {
                    aCanvas.Font.Size = FSize / 2;
                }
                else
                {
                    aCanvas.Font.Size = FSize;
                }

                aCanvas.Font.FontStyles = FFontStyles;
            }
            finally
            {
                aCanvas.Font.EndUpdate();
            }

            aCanvas.GetTextMetrics(ref FTextMetric);

            FONTSIGNATURE vFontSignature = new FONTSIGNATURE();

            FFontHeight = aCanvas.TextHeight("H");

            if ((GDI.GetTextCharsetInfo(aCanvas.Handle, ref vFontSignature, 0) != GDI.DEFAULT_CHARSET) &&
                ((vFontSignature.fsCsb[0] & CJK_CODEPAGE_BITS) != 0))
            {
                FCJKFont = true;
            }
            else
            {
                FCJKFont = false;
            }

            if (FOutMetSize > 0)
            {
                Marshal.FreeHGlobal(FOutlineTextmetricPtr);
            }


            FOutMetSize = GDI.GetOutlineTextMetrics(aCanvas.Handle, 0, IntPtr.Zero);
            if (FOutMetSize != 0)
            {
                //FOutMetSize = (uint)Marshal.SizeOf(FOutlineTextmetric);
                FOutlineTextmetricPtr = Marshal.AllocHGlobal((int)FOutMetSize);


                if (GDI.GetOutlineTextMetrics(aCanvas.Handle, FOutMetSize, FOutlineTextmetricPtr) != 0)
                {
                    //FOutlineTextmetric = new OUTLINETEXTMETRICW();
                    //FOutlineTextmetric = (OUTLINETEXTMETRICW)Marshal.PtrToStructure(FOutlineTextmetricPtr, typeof(OUTLINETEXTMETRICW));
                    //string otmpFamilyName = Marshal.PtrToStringUni(new IntPtr((int)FOutlineTextmetricPtr + (int)FOutlineTextmetric.otmpFamilyName));
                    //string otmpFaceName = Marshal.PtrToStringUni(new IntPtr((int)FOutlineTextmetricPtr + (int)FOutlineTextmetric.otmpFaceName)); ;
                    //string otmpStyleName = Marshal.PtrToStringUni(new IntPtr((int)FOutlineTextmetricPtr + (int)FOutlineTextmetric.otmpStyleName)); ;
                    //string otmpFullName = Marshal.PtrToStringUni(new IntPtr((int)FOutlineTextmetricPtr + (int)FOutlineTextmetric.otmpFullName)); ;
                    // 以上为参考代码
                    //Marshal.PtrToStructure(FOutlineTextmetricPtr, FOutlineTextmetric);
                    FOutlineTextmetric = (OUTLINETEXTMETRICW)Marshal.PtrToStructure(FOutlineTextmetricPtr, typeof(OUTLINETEXTMETRICW));
                }
            }

            if ((uint)GDI.GetFontData(aCanvas.Handle, MS_HHEA_TAG, 0, ref FFontHeader, Marshal.SizeOf(FFontHeader)) == GDI.GDI_ERROR)
            {
                return;
            }
        }
Esempio n. 5
0
        protected override void DoPaint(HCStyle aStyle, RECT aDrawRect, int aDataDrawTop, int aDataDrawBottom,
                                        int aDataScreenTop, int aDataScreenBottom, HCCanvas aCanvas, PaintInfo aPaintInfo)
        {
            base.DoPaint(aStyle, aDrawRect, aDataDrawTop, aDataDrawBottom, aDataScreenTop, aDataScreenBottom,
                         aCanvas, aPaintInfo);

            if ((FMouseIn) && (!aPaintInfo.Print))
            {
                aCanvas.Brush.Color = HC.clBtnFace;
                aCanvas.FillRect(aDrawRect);
            }

            RECT vBoxRect = GetBoxRect();

            HC.OffsetRect(ref vBoxRect, aDrawRect.Left, aDrawRect.Top);

            if (this.IsSelectComplate && (!aPaintInfo.Print))
            {
                aCanvas.Brush.Color = aStyle.SelColor;
                aCanvas.FillRect(aDrawRect);
            }

            aCanvas.Brush.Style = HCBrushStyle.bsClear;

            aStyle.TextStyles[TextStyleNo].ApplyStyle(aCanvas, aPaintInfo.ScaleY / aPaintInfo.Zoom);
            aCanvas.TextOut(aDrawRect.Left + FMargin + CheckBoxSize + FMargin, aDrawRect.Top + (Height - aCanvas.TextHeight("H")) / 2, FText);

            if (FChecked)  // 勾选
            {
                User.DrawFrameControl(aCanvas.Handle, ref vBoxRect, Kernel.DFC_MENU, Kernel.DFCS_CHECKED | Kernel.DFCS_MENUCHECK);
            }

            if (FMouseIn && (!aPaintInfo.Print))  // 鼠标在其中,且非打印
            {
                aCanvas.Pen.Color = Color.Blue;
                aCanvas.Rectangle(vBoxRect.Left, vBoxRect.Top, vBoxRect.Right, vBoxRect.Bottom);
                HC.InflateRect(ref vBoxRect, 1, 1);
                aCanvas.Pen.Color = HC.clBtnFace;
                aCanvas.Rectangle(vBoxRect.Left, vBoxRect.Top, vBoxRect.Right, vBoxRect.Bottom);
            }
            else  // 鼠标不在其中或打印
            {
                aCanvas.Pen.Color = Color.Black;
                aCanvas.Rectangle(vBoxRect.Left, vBoxRect.Top, vBoxRect.Right, vBoxRect.Bottom);
            }
        }