0

msdn hereに書かれている内容によると、ES_AUTOHSCROLL スタイルを持たない場合、挿入される文字数が richTextBox の幅を超えると、EN_MAXTEXT メッセージが表示されるはずです。
しかし、それは私にはうまくいきません。

私はこのコードを書きました:

    public class myRTB : RichTextBox
        {

            protected override void WndProc(ref Message m)
            {
                if (m.Msg == (WM_REFLECT | WM_COMMAND))
                {
                    int code = (int)m.WParam;
                    code = (code >> 16) & 0xffff;  // convert to hiword   
                    if (code == EN_MAXTEXT)
                    {
                        MessageBox.Show("max text");
                    }
                }

                base.WndProc(ref m);
            }

            public const int WM_USER = 0x400;
            public const int WM_REFLECT = WM_USER + 0x1C00;
            public const int WM_COMMAND = 0x111;
            public const int EN_MAXTEXT = 0x0501;

        }

そして、このコードを使用して ES_AUTOHSCROLL スタイルを削除しました。

            private void button1_Click(object sender, EventArgs e)
            {
                // get the style
                IntPtr style = GetWindowLongPtr32(myRTB1.Handle, GWL_STYLE);
                // remove the ES_AUTOHSCROLL style
                SetWindowLong32(myRTB1.Handle, GWL_STYLE, (int)style - ES_AUTOHSCROLL);
            }

            public const int GWL_STYLE = -16;
            public const int ES_AUTOHSCROLL = 0x0080;

            [DllImport("user32.dll", EntryPoint = "SetWindowLong")]
            private static extern int SetWindowLong32(IntPtr hWnd, int nIndex, int dwNewLong);

            [DllImport("user32.dll", EntryPoint = "GetWindowLong")]
            private static extern IntPtr GetWindowLongPtr32(IntPtr hWnd, int nIndex);
4

1 に答える 1

-1

WM_REFLECT を削除します。C# には関係ありません。

于 2012-08-18T21:07:52.613 に答える