C#實現在窗體標題欄加入按鈕(好像不支持WIN7)

    [DllImport("User32.dll")]
        private static extern IntPtr GetWindowDC(IntPtr hwnd);
        [DllImport("User32.dll")]
        private static extern int ReleaseDC(IntPtr hwnd, IntPtr hdc);
        [DllImport("Kernel32.dll")]
        private static extern int GetLastError();
        //標題欄按鈕的矩形區域。
        Rectangle m_rect = new Rectangle(150, 4, 50, 16);
        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);
            switch (m.Msg)
            {
                case 0x86://WM_NCACTIVATE
                    goto case 0x85;
                case 0x85://WM_NCPAINT
                    {
                        IntPtr hDC = GetWindowDC(m.HWnd);
                        //把DC轉換爲.NET的Graphics就可以很方便地使用Framework提供的繪圖功能了
                        Graphics gs = Graphics.FromHdc(hDC);
                        gs.FillRectangle(new LinearGradientBrush(m_rect, Color.Pink, Color.Purple, LinearGradientMode.BackwardDiagonal), m_rect);
                        StringFormat strFmt = new StringFormat();
                        strFmt.Alignment = StringAlignment.Center;
                        strFmt.LineAlignment = StringAlignment.Center;
                        gs.DrawString("標題", this.Font, Brushes.BlanchedAlmond, m_rect, strFmt);
                        gs.Dispose();
                        //釋放GDI資源
                        ReleaseDC(m.HWnd, hDC);
                        break;
                    }
                case 0xA1://WM_NCLBUTTONDOWN
                    {
                        Point mousePoint = new Point((int)m.LParam);
                        mousePoint.Offset(-this.Left, -this.Top);
                        if (m_rect.Contains(mousePoint))
                        {
                            MessageBox.Show("hello");
                        }
                        break;
                    }
            }
        }
        //在窗口大小改變時及時更新按鈕的區域。
        private void Form1_SizeChanged(object sender, System.EventArgs e)
        {
            m_rect.X = this.Bounds.Width - 95;
            m_rect.Y = 4;
            m_rect.Width = m_rect.Height = 16;
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章