社区
C#
帖子详情
怎样重绘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
打赏
收藏
怎样重绘TextBox的边框;而每次都是重绘它的编辑区
为实现Flat的TextBox 覆盖了WndProc(ref Message msg)方法. 当收到WM_PAINT消息时,重绘TextBox 但无论用TextBox生成的Graphic或Form生成的Graphic都无法绘制TextBox的边框。 而只能影响TextBox的编辑区
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
C#
TextBox
重绘
,当Enabled为False时,字体为任意颜色
当
TextBox
的Enanbled为False时,颜色变灰。 通过
重绘
TextBox
,使字体颜色变为任意颜色。
重绘
按钮、文本框等样式
重绘
按钮、文本框等样式
重绘
按钮、文本框等样式
重绘
按钮、文本框等样式
c#
TextBox
输入框自动提示、自动完成、自动补全功能.pdf
c#
TextBox
输入框自动提示、自动完成、自动补全功能
子类化
重绘
仿QQ2009渐变按钮
一个很清新的子类化
重绘
仿QQ2009渐变按钮源代码模块,使用子类技术(subclasses),支持
重绘
VB自带按钮,凡是具有WS_EX_CLIENTEDGE风格的窗口都会
重绘
边框
,比如
TextBox
、ListBox、ListView等等。MsgBox的按钮也可以
重绘
,...
QQ2009渐变按钮 子类化重新仿 精美的界面按鈕
一个子类化
重绘
的仿QQ2009渐变按钮模块,使用子类技术(subclasses),支持
重绘
VB自带按钮,凡是具有WS_EX_CLIENTEDGE风格的窗口都会
重绘
边框
,比如
TextBox
、ListBox、ListView等等。MsgBox的按钮也可以
重绘
,支持...
C#
110,500
社区成员
642,566
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章