如题,代码如下
public partial class myComboBox : System.Windows.Forms.ComboBox
{
[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); public myComboBox() : base()
{
this.FlatStyle = FlatStyle.Flat;
} 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; } Graphics g = Graphics.FromHdc(hDC); //边框
Rectangle rect = new Rectangle(0, 0, Width, Height);
ControlPaint.DrawBorder(g, rect, Color.DarkGray, ButtonBorderStyle.Solid); m.Result = IntPtr.Zero; //返回结果
ReleaseDC(m.HWnd, hDC); //释放
}
}
}运行时在Win2000没问题,在XP下ComboBox控件文本框里有条粗黑线,在主窗体中 Main()方法把Application.EnableVisualStyles();这句注释掉就好了。
我现在不想注释这句,在XP样式下怎样能去掉这条黑线,求教各位高手。
public partial class myComboBox : System.Windows.Forms.ComboBox
{
[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); public myComboBox() : base()
{
this.FlatStyle = FlatStyle.Flat;
} 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; } Graphics g = Graphics.FromHdc(hDC); //边框
Rectangle rect = new Rectangle(0, 0, Width, Height);
ControlPaint.DrawBorder(g, rect, Color.DarkGray, ButtonBorderStyle.Solid); m.Result = IntPtr.Zero; //返回结果
ReleaseDC(m.HWnd, hDC); //释放
}
}
}运行时在Win2000没问题,在XP下ComboBox控件文本框里有条粗黑线,在主窗体中 Main()方法把Application.EnableVisualStyles();这句注释掉就好了。
我现在不想注释这句,在XP样式下怎样能去掉这条黑线,求教各位高手。
//m.Result = IntPtr.Zero; //返回结果
这句改成 if (m.Msg == 0xf) 试试