并在背景贴了图,但是TextBox默认有BackColor,总是覆盖到我贴的图上面。
重载了OnPaintBackground,但是不起作用,用PostMessage发送WM_ERASEBKGND也不行。
怎么也搞不定了,请大家帮忙。
27 个解决方案
#1
楼主太强了,学习一下......
#2
自己顶一下,请大家帮忙~
#3
不了解,帮顶...
#4
自己再顶下,怎么没人理我,郁闷了。
#5
SetBkMode(hdc,TRANSPARENT); 先设背景透明,另外不要用textbox,用drawtext画上去,字就没背景了,不知道是不是这个情况。
#6
谢谢5楼,我是用C#继承TextBox来做的。
不用TextBox,有很多TextBox的特性都要自己来实现,成本太高(比如按向左,向右键,需要计算文字长度,显示在框里的文字,光标位置等等)。
不用TextBox,有很多TextBox的特性都要自己来实现,成本太高(比如按向左,向右键,需要计算文字长度,显示在框里的文字,光标位置等等)。
#7
那就试试设背景为透明,用textbox可以不。
#8
UP
#9
没试过~~~既然可以操作消息了,那就是你绘完之后又有新的操作覆盖了吧,记录一下日志看看顺序?
再就是把BackColor设置为null试试?呵呵,纯属瞎猜~~~
再就是把BackColor设置为null试试?呵呵,纯属瞎猜~~~
#10
SetBkMode(hdc,TRANSPARENT);
这么试了,还是不好用。
BackColor是不可空类型,所以没法设置成null啊。
谢谢大家帮忙!~
这么试了,还是不好用。
BackColor是不可空类型,所以没法设置成null啊。
谢谢大家帮忙!~
#11
关注,楼主的类是继承UserControl类吗?
#12
为什么要重写这个控件?
#13
透明属性不起作用么?
#14
答11楼:继承的是TextBox。
答12楼:界面设计要求是带背景的TextBox,并且是圆角矩形的边框。
答13楼:透明属性指什么?指SetBkMode(hdc,TRANSPARENT);这个函数的TRANSPARENT参数么,这个试过了,没有效果。
答12楼:界面设计要求是带背景的TextBox,并且是圆角矩形的边框。
答13楼:透明属性指什么?指SetBkMode(hdc,TRANSPARENT);这个函数的TRANSPARENT参数么,这个试过了,没有效果。
#15
::SetBkMode(hDC,TRANSPARENT); 这样在c++管用的 能把背景设置成透明色
#16
C#盲弱弱问一句, textbox是否是edit控件?
如果是的话,就得处理 WM_CTLCOLOR, 在这里面设置好控件的 bkmode,bkbrush,textcolor,textfont等等.
你试试.
#17
嗯,C#的Textbox控件就是C++的Edit Control。
我再根据你的想法试试吧,谢谢。
已经说服设计人员,不改背景和边框了,麻烦。
我再根据你的想法试试吧,谢谢。
已经说服设计人员,不改背景和边框了,麻烦。
#18
没改过编辑框· 帮up·
#19
如果真是那样的话,是否可以继承Control类,就是麻烦多了。要自己做textbox了。
#20
SetBkMode 首先要使用HDC的句柄,应该是可以设置背景透明的
#21
是啊,这么做太麻烦了,所以放弃了。成本太高了。
#22
用C#的话,成本就是很高,很多东西都没有,只能自己做...
#23
wm_ctlcolor有用吗?试了没?
我自己重绘edit控件是这么做的。
我自己重绘edit控件是这么做的。
#24
怎么重载的WinProc啊???
能说下吗?
能说下吗?
#25
我让C#的程序用上Aero效果,结果textbox在磨砂玻璃的地方显示不正常,我也是重载WinProc来重绘的,背景图没试,但是边框没问题呀。
用的时候把BorderStyle设为FixedSingle。
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
const int WM_PAINT = 0xF;
if (m.Msg == WM_PAINT && this.BorderStyle == System.Windows.Forms.BorderStyle.FixedSingle)
{
Graphics g = Graphics.FromHwnd(this.Handle);
//绘图操作
g.Dispose();
}
}
用的时候把BorderStyle设为FixedSingle。
#26
有没有详细的代码片段啊?
#27
没想到,时隔一年,我又遇到了这个问题
#1
楼主太强了,学习一下......
#2
自己顶一下,请大家帮忙~
#3
不了解,帮顶...
#4
自己再顶下,怎么没人理我,郁闷了。
#5
SetBkMode(hdc,TRANSPARENT); 先设背景透明,另外不要用textbox,用drawtext画上去,字就没背景了,不知道是不是这个情况。
#6
谢谢5楼,我是用C#继承TextBox来做的。
不用TextBox,有很多TextBox的特性都要自己来实现,成本太高(比如按向左,向右键,需要计算文字长度,显示在框里的文字,光标位置等等)。
不用TextBox,有很多TextBox的特性都要自己来实现,成本太高(比如按向左,向右键,需要计算文字长度,显示在框里的文字,光标位置等等)。
#7
那就试试设背景为透明,用textbox可以不。
#8
UP
#9
没试过~~~既然可以操作消息了,那就是你绘完之后又有新的操作覆盖了吧,记录一下日志看看顺序?
再就是把BackColor设置为null试试?呵呵,纯属瞎猜~~~
再就是把BackColor设置为null试试?呵呵,纯属瞎猜~~~
#10
SetBkMode(hdc,TRANSPARENT);
这么试了,还是不好用。
BackColor是不可空类型,所以没法设置成null啊。
谢谢大家帮忙!~
这么试了,还是不好用。
BackColor是不可空类型,所以没法设置成null啊。
谢谢大家帮忙!~
#11
关注,楼主的类是继承UserControl类吗?
#12
为什么要重写这个控件?
#13
透明属性不起作用么?
#14
答11楼:继承的是TextBox。
答12楼:界面设计要求是带背景的TextBox,并且是圆角矩形的边框。
答13楼:透明属性指什么?指SetBkMode(hdc,TRANSPARENT);这个函数的TRANSPARENT参数么,这个试过了,没有效果。
答12楼:界面设计要求是带背景的TextBox,并且是圆角矩形的边框。
答13楼:透明属性指什么?指SetBkMode(hdc,TRANSPARENT);这个函数的TRANSPARENT参数么,这个试过了,没有效果。
#15
::SetBkMode(hDC,TRANSPARENT); 这样在c++管用的 能把背景设置成透明色
#16
C#盲弱弱问一句, textbox是否是edit控件?
如果是的话,就得处理 WM_CTLCOLOR, 在这里面设置好控件的 bkmode,bkbrush,textcolor,textfont等等.
你试试.
#17
嗯,C#的Textbox控件就是C++的Edit Control。
我再根据你的想法试试吧,谢谢。
已经说服设计人员,不改背景和边框了,麻烦。
我再根据你的想法试试吧,谢谢。
已经说服设计人员,不改背景和边框了,麻烦。
#18
没改过编辑框· 帮up·
#19
如果真是那样的话,是否可以继承Control类,就是麻烦多了。要自己做textbox了。
#20
SetBkMode 首先要使用HDC的句柄,应该是可以设置背景透明的
#21
是啊,这么做太麻烦了,所以放弃了。成本太高了。
#22
用C#的话,成本就是很高,很多东西都没有,只能自己做...
#23
wm_ctlcolor有用吗?试了没?
我自己重绘edit控件是这么做的。
我自己重绘edit控件是这么做的。
#24
怎么重载的WinProc啊???
能说下吗?
能说下吗?
#25
我让C#的程序用上Aero效果,结果textbox在磨砂玻璃的地方显示不正常,我也是重载WinProc来重绘的,背景图没试,但是边框没问题呀。
用的时候把BorderStyle设为FixedSingle。
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
const int WM_PAINT = 0xF;
if (m.Msg == WM_PAINT && this.BorderStyle == System.Windows.Forms.BorderStyle.FixedSingle)
{
Graphics g = Graphics.FromHwnd(this.Handle);
//绘图操作
g.Dispose();
}
}
用的时候把BorderStyle设为FixedSingle。
#26
有没有详细的代码片段啊?
#27
没想到,时隔一年,我又遇到了这个问题