就像Word 2007里的“保存”按钮一样,它是放在标题栏里的。就是Form的最小化,最大化和关闭按钮的位置。或者像TheWorld世界之窗浏览器一样,把菜单放在标题栏里。这样可以节省一行的空间。 可是我的为什么不行。我用的是Visual Studio 2005。按钮和菜单放不上去。 有什么好办法吗? 谢谢!

解决方案 »

  1.   

    重绘标题栏:
    //using System.Runtime.InteropServices;
    //using System.Drawing.Drawing2D;[DllImport("user32.dll")]
    private static extern IntPtr GetWindowDC(IntPtr hWnd);
    [DllImport("user32.dll")]
    private static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);private const int WM_NCPAINT = 0x0085;
    private const int WM_NCACTIVATE = 0x0086;
    private const int WM_NCLBUTTONDOWN = 0x00A1;
    protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m);
        Rectangle vRectangle = new Rectangle((Width - 75) / 2, 3, 75, 25);
        switch (m.Msg)
        {
            case WM_NCPAINT:
            case WM_NCACTIVATE:
                IntPtr vHandle = GetWindowDC(m.HWnd);
                Graphics vGraphics = Graphics.FromHdc(vHandle);
                vGraphics.FillRectangle(new LinearGradientBrush(vRectangle, 
                    Color.Pink, Color.Purple, LinearGradientMode.BackwardDiagonal),
                    vRectangle);
                
                StringFormat vStringFormat = new StringFormat();
                vStringFormat.Alignment = StringAlignment.Center;
                vStringFormat.LineAlignment = StringAlignment.Center;
                vGraphics.DrawString("About", Font, Brushes.BlanchedAlmond, 
                    vRectangle, vStringFormat);            vGraphics.Dispose();
                ReleaseDC(m.HWnd, vHandle);
                break;
            case WM_NCLBUTTONDOWN:
                Point vPoint = new Point((int)m.LParam);
                vPoint.Offset(-Left, -Top);
                if (vRectangle.Contains(vPoint))
                    MessageBox.Show(vPoint.ToString());
                break;
        }
    }
      

  2.   

    似乎只有用win32 api自己画。