调整richtextbox行间距

今天做个提示信息,需要控制文字显示的行间距,原本是想用label来做,后来发现并没有相关的属性可以设置,到网上搜索了一下,唯一的方法似乎只能是自己控制重绘,不想使用这么麻烦的处理,于是又尝试了其它的控件richtextbox,发现还是没有可以直接设置的属性,不过却可以通过api来实现,实现方法如下:

        //定义常量:

        //具体是干什么用的我自己也不清楚

        public const int WM_USER = 0x0400;
        public const int EM_GETPARAFORMAT = WM_USER+61;
        public const int EM_SETPARAFORMAT = WM_USER+71;
        public const long MAX_TAB_STOPS = 32;
        public const uint PFM_LINESPACING = 0x00000100;

        //定义结构体,为什么这么定义,我也不知道

        [StructLayout( LayoutKind.Sequential )]
        private struct PARAFORMAT2{   
        public int cbSize;   
        public uint dwMask;   
        public short wNumbering;   
        public short wReserved;   
        public int dxStartIndent;   
        public int dxRightIndent;   
        public int dxOffset;   
        public short wAlignment;   
        public short cTabCount;   
        [MarshalAs( UnmanagedType.ByValArray, SizeConst = 32 )]   
        public int[] rgxTabs;   
        public int dySpaceBefore;   
        public int dySpaceAfter;   
        public int dyLineSpacing;   
        public short sStyle;   
        public byte bLineSpacingRule;  
        public byte bOutlineLevel;   
        public short wShadingWeight;   
        public short wShadingStyle;   
        public short wNumberingStart;   
        public short wNumberingStyle;   
        public short wNumberingTab;   
        public short wBorderSpace;   
        public short wBorderWidth;   
        public short wBorders;}

        //定义函数

        [DllImport("user32", CharSet = CharSet.Auto)]
        private static extern IntPtr SendMessage(HandleRef hWnd, int msg, int wParam, ref PARAFORMAT2 IParam);

        //调用方法如下

        private void SetLineSpace(int lineSpace)

        {

                PARAFORMAT2 pFormat = new PARAFORMAT2();
                pFormat .cbSize = Marshal.SizeOf(pFormat );
                pFormat .bLineSpacingRule = 4;
                pFormat .dyLineSpacing = lineSpace;

                pFormat .dwMask = PFM_LINESPACING;
                SendMessage(new HandleRef(this.richTextBox1, richTextBox1.Handle),

                                   EM_SETPARAFORMAT, 4, ref pFormat );

          }

posted @ 2011-03-15 19:33  freeman_rain  阅读(1516)  评论(1编辑  收藏  举报