none
透明的背景? RRS feed

答案

  • 版主大大您真利害!

    小弟試了一下,如果Form設BackColor是OK的,只是要调整一下,如下!

    OnPaint Method中

    if (tp.Enabled)
    	e.Graphics.DrawString(tp.Text, Font, PaintBrush,  RectangleF.op_Implicit(r) , sf);
    else
    	ControlPaint.DrawStringDisabled(e.Graphics, tp.Text, Font, tp.BackColor,  RectangleF.op_Implicit(r), sf);
    //改成
    if (tp.Enabled)
    	e.Graphics.DrawString(tp.Text, Font, PaintBrush,  r , sf);
    else
    	ControlPaint.DrawStringDisabled(e.Graphics, tp.Text, Font, tp.BackColor,  r , sf);	

    WndProc多加判断有事件才invoke

    protected override void WndProc(ref Message m)
    {
    	if (m.Msg == (WM_REFLECT + WM_NOTIFY))
    	{
    		NMHDR hdr = (NMHDR)(Marshal.PtrToStructure(m.LParam, typeof(NMHDR)));
    		if (hdr.code == TCN_SELCHANGING)
    		{
    			TabPage tp = TestTab(PointToClient(Cursor.Position));
    			if (tp != null)
    			{
    				TabPageChangeEventArgs e = new TabPageChangeEventArgs(SelectedTab, tp);
    				//有事件才invoke
    				if(SelectedIndexChanging!=null)
    					SelectedIndexChanging(this, e);
    				if (e.Cancel || tp.Enabled == false)
    				{
    					m.Result = new IntPtr(1);
    					return;
    				}
    			}
    		}
    	}
    	base.WndProc(ref m);
    }
    但是如果Form是設定BackGroundImage的話,那個就不行了!


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    2012年5月10日 1:11
  • Hi 沙漠雄鹰,

    欢迎来到C#论坛。

    你可以试试下面这个例子。

    A Completely OwnerDraw TabControl

    http://homepage.ntlworld.com/mdaudi100/alternate/tabcontrols.html

    祝你愉快。


    Bob Shen [MSFT]
    MSDN Community Support | Feedback to us

    2012年5月9日 5:41
    版主

全部回复

  • 您好,
    就小弟所知的tabControl控件无法设定成透明的!
    其他的控件,您可以参考一下以下文章的做法!
    Transparent Buttons in .NET

    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年5月8日 5:57
  • Hi 沙漠雄鹰,

    欢迎来到C#论坛。

    你可以试试下面这个例子。

    A Completely OwnerDraw TabControl

    http://homepage.ntlworld.com/mdaudi100/alternate/tabcontrols.html

    祝你愉快。


    Bob Shen [MSFT]
    MSDN Community Support | Feedback to us

    2012年5月9日 5:41
    版主
  • 版主大大您真利害!

    小弟試了一下,如果Form設BackColor是OK的,只是要调整一下,如下!

    OnPaint Method中

    if (tp.Enabled)
    	e.Graphics.DrawString(tp.Text, Font, PaintBrush,  RectangleF.op_Implicit(r) , sf);
    else
    	ControlPaint.DrawStringDisabled(e.Graphics, tp.Text, Font, tp.BackColor,  RectangleF.op_Implicit(r), sf);
    //改成
    if (tp.Enabled)
    	e.Graphics.DrawString(tp.Text, Font, PaintBrush,  r , sf);
    else
    	ControlPaint.DrawStringDisabled(e.Graphics, tp.Text, Font, tp.BackColor,  r , sf);	

    WndProc多加判断有事件才invoke

    protected override void WndProc(ref Message m)
    {
    	if (m.Msg == (WM_REFLECT + WM_NOTIFY))
    	{
    		NMHDR hdr = (NMHDR)(Marshal.PtrToStructure(m.LParam, typeof(NMHDR)));
    		if (hdr.code == TCN_SELCHANGING)
    		{
    			TabPage tp = TestTab(PointToClient(Cursor.Position));
    			if (tp != null)
    			{
    				TabPageChangeEventArgs e = new TabPageChangeEventArgs(SelectedTab, tp);
    				//有事件才invoke
    				if(SelectedIndexChanging!=null)
    					SelectedIndexChanging(this, e);
    				if (e.Cancel || tp.Enabled == false)
    				{
    					m.Result = new IntPtr(1);
    					return;
    				}
    			}
    		}
    	}
    	base.WndProc(ref m);
    }
    但是如果Form是設定BackGroundImage的話,那個就不行了!


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    2012年5月10日 1:11