`
wangfu_02
  • 浏览: 71755 次
社区版块
存档分类
最新评论

重写.net的winfrom控件

    博客分类:
  • .net
阅读更多
这几天做winfrom项目,为个改变按钮样式,使用到了重写控件技术。

开始实现自定义button的时候,使用的是OnPaint方式,但出现的一个现象解决不了。就是当有其它窗口遮挡住自定义button后,再关闭遮挡窗口后,自定义button不进行重绘,估计那个地方有问题吧。
后来考虑到象textbox这咱控件不能通过OnPaint进行重写,

最后改用拦截系统重绘消息的方式解决了这个问题。
先导入user32.dll
[System.Runtime.InteropServices.DllImport("user32.dll ")]

  static extern IntPtr GetWindowDC(IntPtr hWnd);

  [System.Runtime.InteropServices.DllImport("user32.dll ")]

   static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);

重写WndProc
protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);
            //判断是否是重绘消息
            if (m.Msg == 0xf || m.Msg == 0x133)
            {
                IntPtr hDC = GetWindowDC(m.HWnd);

                if (hDC.ToInt32() == 0)
                {
                    return;
                }
                try
                {
                    System.Drawing.Graphics g = Graphics.FromHdc(hDC);
                    System.Drawing.Rectangle rect = new Rectangle(0, 0, this.Width, this.Height);
                    System.Windows.Forms.PaintEventArgs e = new PaintEventArgs(g, rect);
                    this.DrawBackgroundColor(e);
                    this.DrawForeColor(e);
                    this.DrawText(e);
                    //返回结果  
                    m.Result = IntPtr.Zero;
                    //释放  
                    ReleaseDC(m.HWnd, hDC);
                }
                catch
                {
                }
            }
        }

分享到:
评论

相关推荐

    Winfrom 自定义日历控件

    Winform是.NET Framework提供的一个用于构建桌面应用程序的库,它包含了一系列丰富的控件,如Button、TextBox等。开发者可以使用Visual Studio这样的IDE来设计UI并编写后台逻辑。 2. **MonthCalendar控件**: ...

    winform panel控件背景透明

    首先,我们要明白.NET Framework的Windows Forms并不直接支持控件的透明度设置,但我们可以利用一些技巧来模拟透明效果。主要方法有两种:使用双缓冲技术和处理WM_PAINT消息。 1. 双缓冲技术: 双缓冲是一种减少...

    WinForm自定义下拉列表框用户控件

    在.NET Framework中,Windows Forms(WinForm)是一个用于构建桌面应用程序的强大工具,它提供了一系列丰富的控件供开发者使用。在某些场景下,系统的标准控件可能无法满足特定需求,这时就需要进行自定义控件的开发...

    玻璃按钮--很炫的winform按钮重写效果,

    开发者通过重写.NET Framework的基础Button控件,利用C#的特性及GDI+绘图技术,为用户提供了一种美观且交互性强的界面元素。如果你对Windows桌面应用的UI设计或自定义控件感兴趣,这个项目将是一个很好的学习资源。

    winform 自定义日期控件(最低分分享)

    首先,我们需要了解.NET Framework中的标准日期控件,如DateTimePicker。DateTimePicker是Winform内置的一个控件,它允许用户选择日期和时间。然而,有时默认的控件样式和功能可能无法满足所有设计要求,因此自定义...

    C#自定义控件:一个简单的圆形按钮源码

    自定义控件是在.NET Framework中扩展标准控件功能的一种方法。这允许开发者根据项目需求定制UI元素,提高应用的用户体验和一致性。在C#中,自定义控件通常继承自现有的System.Windows.Forms.Control类,并通过重写或...

    C# Winfrom 自定义控件针对GDI+操作

    在自定义控件中,通常会重写`OnPaint`事件处理函数,这是进行图形绘制的主要场所。你需要在这个函数内调用`Graphics`对象的方法,以完成你的绘图逻辑。同时,确保在绘制结束后调用`Control.Invalidate()`方法,以便...

    c# 功能强大 酷牛逼的表格 自定义控件

    - 自定义过程:创建自定义表格控件通常涉及继承自现有的控件(如DataGridView),然后重写或扩展其方法和属性。这可能包括绘制逻辑、事件处理、数据绑定等方面。 - 组件化设计:为了提高可复用性和可维护性,...

    非常好看的winform 自定义日期控件

    1. **外观定制**:可以通过重写OnPaint方法,利用Graphics对象进行绘制,实现控件的视觉样式。可以改变控件的边框、背景色、字体、图标等元素,使其更符合应用的设计风格。 2. **事件处理**:通过覆写控件的默认...

    c# winfrom 自定义简单的tree控件(入门)

    自定义控件时,我们可能需要重写`OnPaint`方法来控制控件的绘制。在Tree控件中,可能需要绘制节点、连接线以及节点的图标。使用`Graphics`对象和相关的绘图方法,我们可以实现自定义的视觉效果。 5. **数据绑定**...

    C#Winform透明Textbox控件

    1. **创建自定义控件**:继承自TextBox基类,并重写绘制事件,使用Graphics类和SolidBrush类来绘制透明背景。 2. **Alpha混合**:利用Graphics类的SetOpacity方法或者使用WinAPI的SetLayeredWindowAttributes函数来...

    WinForm控件开发总结(完整版)

    2. **绘制控件**:通过重写`OnPaint`方法来定义控件的外观。还可以通过重写`WndProc`方法处理底层的Windows消息。 3. **管理属性**:通过使用`PropertyDescriptor`和`TypeConverter`来提供对控件属性的编辑和序列化...

    WinForm 实现半透明控件

    首先,创建一个自定义控件,继承自`Control`类,然后重写`OnPaint`事件。在`OnPaint`方法中,使用`Graphics`对象的`DrawLine`、`DrawRectangle`和`DrawPolygon`方法绘制图形,并通过`Pen`对象的`Color`属性设置线条...

    非常好看的winform 自定义日期控件2019

    4. **自定义绘图**:通过重写OnPaint方法,利用Graphics类进行控件的绘制。 5. **继承和封装**:基于Control类创建自定义控件,封装日期选择和显示的逻辑。 6. **多态和接口**:可能使用了接口或抽象类来实现特定...

    winform中去掉richtextbox中的光标

    在这个自定义控件中,我们重写了`OnGotFocus`和`OnLostFocus`事件处理程序。当控件获得焦点时,调用`HideCaret`方法隐藏光标;当失去焦点时,如果控件仍具有焦点,则显示光标。 2. **在窗体中使用自定义控件** 在`...

    winform自定义透明背景的panel控件

    在.NET Framework中,控件的透明度由`BackColor`属性和`Alpha`通道决定。默认情况下,Panel控件的`BackColor`是固态颜色,不支持透明。为了实现透明效果,我们需要将`BackColor`设置为`Color.Transparent`,并启用...

    WinFormTabContrl控件TabPageName横向显示.rar

    这可能是一个自定义的用户控件,继承自`TabControl`,并重写了绘制方法,以便在绘制`TabPage`的标题时使其水平显示。开发者可能使用了`OnPaint`事件来覆盖控件的默认绘画行为,并使用`Graphics`对象来手动绘制标签...

    Winform TextBox支持垂直居中自定义控件

    总的来说,这个自定义控件的实现是一个很好的示例,展示了如何扩展.NET Framework的内置控件以满足特定的界面需求。通过理解控件的生命周期、绘图机制以及如何响应控件状态的变化,开发者可以创建出更符合用户界面...

    WinFrom窗体入门1

    - WinFrom窗体是.NET Framework提供的一种用于创建桌面应用程序的窗口组件。它基于Windows API,允许开发者使用直观的Visual Studio设计工具来布局控件和定义用户交互。 - 窗体(Form)是应用程序的基本元素,通常...

    DataGridView合计控件For WinForm

    2. 自定义列:创建自定义`DataGridViewTextBoxColumn`或`DataGridViewTextBoxColumn`子类,重写`CellValueChanged`事件,实时更新合计值。 3. 使用`DataGridViewSummaryRow`:这是一个扩展控件,可以在最后一行显示...

Global site tag (gtag.js) - Google Analytics