C# WinForm控件美化扩展系列之TabControl控件(1)

本文介绍了如何美化C# WinForm应用程序中的TabControl控件的UpDownButton按钮,通过FindWindowEx API获取按钮句柄,并实现UpDownButtonNativeWindow类来截取并重绘按钮,提供了一个逐步进阶的美化方案。

C# WinForm控件美化扩展系列之TabControl控件(1)

2009-10-30  来自:CS 程序员之窗  字体大小:【    
  • 摘要:这篇文章我们将介绍TabControl控件的美化,因为它跟NumericUpDown控件一样,也包含一个UpDownButton按钮,这篇文章只介绍对TabControl的UpDownButton按钮的美化,接下来的文章将一步步的介绍对TabControl的完全美化。

前面的文章C# WinForm控件美化扩展系列之UpDown控件NumericUpDown中介绍了对NumericUpDown控件的美化,这篇文章我们将介绍TabControl控件的美化,因为它跟NumericUpDown控件一样,也包含一个UpDownButton按钮,这篇文章只介绍对TabControlUpDownButton按钮的美化,接下来的文章将一步步的介绍对TabControl的完全美化。

TabControl控件的TabPage页比较多的时候,TabPage页有些显示不完,它就会显示一个UpDownButton按钮,用来操作移动TabPage的显示。这个UpDownButton按钮不像NumericUpDown控件那样容易得到,需要通过API函数FindWindowEx来得到,通过FindWindowEx函数来查找UpDownButton按钮,需要知道它的类名,通过SPY++可以查询到,它的类名为“msctls_updown32。看看查找UpDownButton按钮的代码:

        private IntPtr FindUpDownButton()

        {

            return NativeMethods.FindWindowEx(

                base.Handle,

                IntPtr.Zero,

                UpDownButtonClassName,

                null);

        }

    得到了UpDownButton按钮,就可以用NumericUpDown一样的步骤方法对它进行美化了,不过要注意的是,当TabControl控件增加TabPage页或者TabControl控件调整大小的时候,需要查询是否需要显示UpDownButton按钮,否者就不能对它进行美化了,因为如果刚开始的时候控件不需要显示UpDownButton按钮的话,是查询不到它的,那样就没能对它的绘制消息进行截取。

    跟以前一样,还是要实现一个UpDownButtonNativeWindow类,把UpDownButton的句柄分配给它,就可以通过它截取UpDownButton的消息了。在这个类里面,截取WM_PAINT消息,重绘UpDownButton控件。来看看UpDownButtonNativeWindow类的完整实现代码:

        private class UpDownButtonNativeWindow : NativeWindow, IDisposable

        {

            private TabControlEx _owner;

            private bool _bPainting;

 

            public UpDownButtonNativeWindow(TabControlEx owner)

                : base()

            {

                _owner = owner;

                base.AssignHandle(owner.UpDownButtonHandle);

            }

 

            private bool LeftKeyPressed()

            {

                if (SystemInformation.MouseButtonsSwapped)

                {

                    return (NativeMethods.GetKeyState(NativeMethods.VK_RBUTTON) < 0);

         &nbs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值