设置RichTextbox行间距

RichTextbox虽然内置的功能已经很强大了,但是还是有些功能没有提供,就比如“行间距”,不知道其内置的功能是否可以实现,这里在网上找到一个使用win32来设置的

 

 

View Code
 1 public const int WM_USER = 0x0400;
 2         public const int EM_GETPARAFORMAT = WM_USER + 61;
 3         public const int EM_SETPARAFORMAT = WM_USER + 71;
 4         public const long MAX_TAB_STOPS = 32;
 5         public const uint PFM_LINESPACING = 0x00000100;
 6         [StructLayout(LayoutKind.Sequential)]
 7         private struct PARAFORMAT2
 8         {
 9             public int cbSize;
10             public uint dwMask;
11             public short wNumbering;
12             public short wReserved;
13             public int dxStartIndent;
14             public int dxRightIndent;
15             public int dxOffset;
16             public short wAlignment;
17             public short cTabCount;
18             [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
19             public int[] rgxTabs;
20             public int dySpaceBefore;
21             public int dySpaceAfter;
22             public int dyLineSpacing;
23             public short sStyle;
24             public byte bLineSpacingRule;
25             public byte bOutlineLevel;
26             public short wShadingWeight;
27             public short wShadingStyle;
28             public short wNumberingStart;
29             public short wNumberingStyle;
30             public short wNumberingTab;
31             public short wBorderSpace;
32             public short wBorderWidth;
33             public short wBorders;
34         }
35 
36         [DllImport("user32", CharSet = CharSet.Auto)]
37         private static extern IntPtr SendMessage(HandleRef hWnd, int msg, int wParam, ref PARAFORMAT2 lParam);
38 
39         /// <summary>
40         /// 设置行距
41         /// </summary>
42         /// <param name="ctl">控件</param>
43         /// <param name="dyLineSpacing">间距</param>
44         public static void SetLineSpace(Control ctl, int dyLineSpacing)
45         {
46             PARAFORMAT2 fmt = new PARAFORMAT2();
47             fmt.cbSize = Marshal.SizeOf(fmt);
48             fmt.bLineSpacingRule = 4;// bLineSpacingRule;
49             fmt.dyLineSpacing = dyLineSpacing;
50             fmt.dwMask = PFM_LINESPACING;
51             try
52             {
53                 SendMessage(new HandleRef(ctl, ctl.Handle), EM_SETPARAFORMAT, 0ref fmt);
54             }
55             catch
56             {
57 
58             }
59         }

 

然后可以在Form_Load事件里面调用,代码如下:

       

SetLineSpace(txt_content, 300);

 

第一个参数是一个Control类型的,第二个就是行间距了,哈哈,很简单吧。
posted @ 2011-08-30 18:01  lawbc  阅读(12437)  评论(1编辑  收藏  举报