C# WinForm控件美化扩展系列之TabControl控件(1)
- 摘要:这篇文章我们将介绍TabControl控件的美化,因为它跟NumericUpDown控件一样,也包含一个UpDownButton按钮,这篇文章只介绍对TabControl的UpDownButton按钮的美化,接下来的文章将一步步的介绍对TabControl的完全美化。
前面的文章C# WinForm控件美化扩展系列之UpDown控件NumericUpDown中介绍了对NumericUpDown控件的美化,这篇文章我们将介绍TabControl控件的美化,因为它跟NumericUpDown控件一样,也包含一个UpDownButton按钮,这篇文章只介绍对TabControl的UpDownButton按钮的美化,接下来的文章将一步步的介绍对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

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

被折叠的 条评论
为什么被折叠?



