这几天做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
{
}
}
}
分享到:
相关推荐
Winform是.NET Framework提供的一个用于构建桌面应用程序的库,它包含了一系列丰富的控件,如Button、TextBox等。开发者可以使用Visual Studio这样的IDE来设计UI并编写后台逻辑。 2. **MonthCalendar控件**: ...
首先,我们要明白.NET Framework的Windows Forms并不直接支持控件的透明度设置,但我们可以利用一些技巧来模拟透明效果。主要方法有两种:使用双缓冲技术和处理WM_PAINT消息。 1. 双缓冲技术: 双缓冲是一种减少...
在.NET Framework中,Windows Forms(WinForm)是一个用于构建桌面应用程序的强大工具,它提供了一系列丰富的控件供开发者使用。在某些场景下,系统的标准控件可能无法满足特定需求,这时就需要进行自定义控件的开发...
自定义控件是在.NET Framework中扩展标准控件功能的一种方法。这允许开发者根据项目需求定制UI元素,提高应用的用户体验和一致性。在C#中,自定义控件通常继承自现有的System.Windows.Forms.Control类,并通过重写或...
开发者通过重写.NET Framework的基础Button控件,利用C#的特性及GDI+绘图技术,为用户提供了一种美观且交互性强的界面元素。如果你对Windows桌面应用的UI设计或自定义控件感兴趣,这个项目将是一个很好的学习资源。
首先,我们需要了解.NET Framework中的标准日期控件,如DateTimePicker。DateTimePicker是Winform内置的一个控件,它允许用户选择日期和时间。然而,有时默认的控件样式和功能可能无法满足所有设计要求,因此自定义...
在自定义控件中,通常会重写`OnPaint`事件处理函数,这是进行图形绘制的主要场所。你需要在这个函数内调用`Graphics`对象的方法,以完成你的绘图逻辑。同时,确保在绘制结束后调用`Control.Invalidate()`方法,以便...
- 自定义过程:创建自定义表格控件通常涉及继承自现有的控件(如DataGridView),然后重写或扩展其方法和属性。这可能包括绘制逻辑、事件处理、数据绑定等方面。 - 组件化设计:为了提高可复用性和可维护性,...
1. **外观定制**:可以通过重写OnPaint方法,利用Graphics对象进行绘制,实现控件的视觉样式。可以改变控件的边框、背景色、字体、图标等元素,使其更符合应用的设计风格。 2. **事件处理**:通过覆写控件的默认...
1. **创建自定义控件**:继承自TextBox基类,并重写绘制事件,使用Graphics类和SolidBrush类来绘制透明背景。 2. **Alpha混合**:利用Graphics类的SetOpacity方法或者使用WinAPI的SetLayeredWindowAttributes函数来...
自定义控件时,我们可能需要重写`OnPaint`方法来控制控件的绘制。在Tree控件中,可能需要绘制节点、连接线以及节点的图标。使用`Graphics`对象和相关的绘图方法,我们可以实现自定义的视觉效果。 5. **数据绑定**...
2. **绘制控件**:通过重写`OnPaint`方法来定义控件的外观。还可以通过重写`WndProc`方法处理底层的Windows消息。 3. **管理属性**:通过使用`PropertyDescriptor`和`TypeConverter`来提供对控件属性的编辑和序列化...
首先,创建一个自定义控件,继承自`Control`类,然后重写`OnPaint`事件。在`OnPaint`方法中,使用`Graphics`对象的`DrawLine`、`DrawRectangle`和`DrawPolygon`方法绘制图形,并通过`Pen`对象的`Color`属性设置线条...
4. **自定义绘图**:通过重写OnPaint方法,利用Graphics类进行控件的绘制。 5. **继承和封装**:基于Control类创建自定义控件,封装日期选择和显示的逻辑。 6. **多态和接口**:可能使用了接口或抽象类来实现特定...
在.NET Framework中,控件的透明度由`BackColor`属性和`Alpha`通道决定。默认情况下,Panel控件的`BackColor`是固态颜色,不支持透明。为了实现透明效果,我们需要将`BackColor`设置为`Color.Transparent`,并启用...
- WinFrom窗体是.NET Framework提供的一种用于创建桌面应用程序的窗口组件。它基于Windows API,允许开发者使用直观的Visual Studio设计工具来布局控件和定义用户交互。 - 窗体(Form)是应用程序的基本元素,通常...
标签 "C# 自定义控件" 表明这个控件是使用C#语言编写的,并且是自定义的,意味着它不是.NET Framework提供的标准控件,而是开发者根据需求定制的。 在实现这个控件时,开发者可能首先创建了一个继承自`System....
这可能是一个自定义的用户控件,继承自`TabControl`,并重写了绘制方法,以便在绘制`TabPage`的标题时使其水平显示。开发者可能使用了`OnPaint`事件来覆盖控件的默认绘画行为,并使用`Graphics`对象来手动绘制标签...
2. 自定义列:创建自定义`DataGridViewTextBoxColumn`或`DataGridViewTextBoxColumn`子类,重写`CellValueChanged`事件,实时更新合计值。 3. 使用`DataGridViewSummaryRow`:这是一个扩展控件,可以在最后一行显示...
C#作为.NET框架的主要编程语言,提供了丰富的UI控件,其中包括基本的ProgressBar控件。然而,为了提供更美观、更具吸引力的用户体验,我们经常需要对其进行自定义和美化。 首先,"C# winform 美化 进度条 控件"这个...