1

アドバイスを求めています...フォームのクライアント領域を拡張して、タイトル バーとウィンドウの境界線を含めようとしています。ボタンを追加して非クライアント領域にペイントできるようにしたい。この記事を読みまし たが、これは C++ で書かれており、C# を使用しています (Visual Basic も動作します)。それを読んだ後、私はこのコードを思いつきました:

public partial class Form2 : Form
{
    [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] 
    public static extern bool GetWindowRect(HandleRef hwnd, out Rectangle lpRect);

    [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, 
        int cx, int cy, SetWindowPosFlags uFlags);

    public enum SetWindowPosFlags : uint { };

    public Form2()
    {
        InitializeComponent();
    }

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x0001)
        {
            Rectangle rcClient;
            GetWindowRect(new HandleRef(this, this.Handle), out rcClient);
            SetWindowPos(this.Handle, (IntPtr)0, rcClient.Left, rcClient.Top,
                rcClient.Width, rcClient.Height, new SetWindowPosFlags());

            //fCallDWP = true;  No idea what to do with these two
            //lRet = 0;
        }
        base.WndProc(ref m);
    }

これはウィンドウを大きくするだけで、非クライアント領域には何もしません。私は一日中グーグルで検索してきましたが、これ以上のものに出くわしていません。これはしばらく私を悩ませてきたので、誰かアイデアがあれば、返信を残してください.

また、初投稿なので何か間違っていたら教えてください。

4

0 に答える 0