怎样重绘TextBox的边框;而每次都是重绘它的编辑区

bobit 2003-08-25 11:37:21
为实现Flat的TextBox
覆盖了WndProc(ref Message msg)方法.
当收到WM_PAINT消息时,重绘TextBox
但无论用TextBox生成的Graphic或Form生成的Graphic都无法绘制TextBox的边框。
而只能影响TextBox的编辑区
...全文
226 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
sarmoo 2003-08-27
  • 打赏
  • 举报
回复
可以用SetWindowPos试一下。
sarmoo 2003-08-26
  • 打赏
  • 举报
回复
对不起,那个实际上就是WM_NCPAINT,只是个人写法而已。
atian25 2003-08-26
  • 打赏
  • 举报
回复
to cherno(且歌且狂):既然很简单,能麻烦把它帖出来吗?
freesino 2003-08-26
  • 打赏
  • 举报
回复
我对 sarmoo(Echo) 例子中的“Platform.NativeMethods.WM_NCPAINT:”比较关注,不知道,如何调用????
sarmoo 2003-08-26
  • 打赏
  • 举报
回复
注意我给你的例子:
Graphics g = Graphics.FromHdc(...GetWindowDC(m.HWnd));//API
需调用GetWindowDC(API函数)得到windowDC
bobit 2003-08-26
  • 打赏
  • 举报
回复
TO sarmoo(Echo):
我都试过了,就是没用,现在关键是Graphic对象,我试了一下:
用this.CreateGraphics(); 只能在TextBox的编辑区内绘图。
用this.Parent.CreateGraphics(); 就只能在它的Parent上绘图。
始终不能影响边框。
我尝试过上面两个Graphic填充一个区域,但最后边框还是没有改变
BLGT 2003-08-26
  • 打赏
  • 举报
回复
codeproject上例子很多啊,去找找
bobit 2003-08-26
  • 打赏
  • 举报
回复
顺便问一下,
.net Framework中要强制发一个WM_NCPAINT消息,该用什么方法
bobit 2003-08-26
  • 打赏
  • 举报
回复
谢谢 sarmoo(Echo)
以搞定:
switch( msg )
{
case WM_NCPAINT:
{
Pen pen = new Pen(this.BackColor);
Graphics borderG = Graphics.FromHdc( GetWindowDC(m.HWnd) );

borderG.DrawRectangle( pen, 1, 1, this.Size.Width-2, this.Size.Height- 2 );

borderG.Dispose();
pen.Dispose();
break;
}
}
freesino 2003-08-26
  • 打赏
  • 举报
回复
还是不懂!能不能说的更清楚点?
atian25 2003-08-25
  • 打赏
  • 举报
回复
我前几天有做,也碰到点问题,一起探讨下:
边框我有了
但是我的问题是背景图,每次输入文字就会重绘,以致看不到输入的文字(实际.text已经得到)
是不是还要override onTextChange?

我的代码如下:

public class TextBoxBlue:TextBox
{
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
int WM_PAINT=15;
if (m.Msg==WM_PAINT)//好象这个判断不用也可以
{
Graphics g = Graphics.FromHwnd(this.Handle);
g.DrawRectangle(Pens.Blue,this.ClientRectangle.Left,this.ClientRectangle.Top,this.ClientRectangle.Width - 1,this.ClientRectangle.Height - 1);//画边框
g.DrawImage((Bitmap)Bitmap.FromFile(@"c:\00.bmp"),this.ClientRectangle.Left,this.ClientRectangle.Top,this.ClientRectangle.Width - 1,this.ClientRectangle.Height - 1);//画背景图
g.Dispose();
}
}
}
维她奶 2003-08-25
  • 打赏
  • 举报
回复
gz
Jim3 2003-08-25
  • 打赏
  • 举报
回复
关注
jjcccc 2003-08-25
  • 打赏
  • 举报
回复
GZ
sarmoo 2003-08-25
  • 打赏
  • 举报
回复
如果你要画上边框和左边框,你的代码是不是算错了?
似乎应该是:borderG.DrawRectangle( new Pen(this.BackColor), this.Left-1, this.Top-1, this.Width-2, this.Height-2 );
Gabriel_tosh 2003-08-25
  • 打赏
  • 举报
回复
ControlPaint.DrawBorder
ControlPaint.DrawBorder
ControlPaint.DrawBorder
ControlPaint.DrawBorder
ControlPaint.DrawBorder
ControlPaint.DrawBorder
ControlPaint.DrawBorder
cherno 2003-08-25
  • 打赏
  • 举报
回复
呵呵~~自己写一个控件多好,完全自画,一个TextBox的功能又不复杂`~
bobit 2003-08-25
  • 打赏
  • 举报
回复
我主要是想把TextBox的上边框和左边框的 深灰色条用编辑区的颜色覆盖就成了一个Flat的TextBox了
bobit 2003-08-25
  • 打赏
  • 举报
回复
以上源代码不对吗
bobit 2003-08-25
  • 打赏
  • 举报
回复
protected override void WndProc(ref Message m)
{
int msg = m.Msg;
base.WndProc (ref m);
switch( msg )
{
case WM_NCPAINT:
{
Graphics borderG = this.Parent.CreateGraphics();
borderG.DrawRectangle( new Pen(this.BackColor), this.Left+1, this.Top+1, this.Width-2, this.Height-2 );
break;
}
}
}
加载更多回复(4)

110,500

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧