winform窗口重绘问题 我自己绘制了winform界面,在Paint方法里面手工绘制了各个部分,当我改变窗口大小的时候,有些部分再新的窗口大小相对位置又重新出现了图片,但是在原来那个地方的图片没有消失,我想问各位大虾,在窗口重绘的时候应该怎么让窗口刷新啊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 refresh(); http://topic.csdn.net/u/20071020/21/5e94526f-6516-400b-9176-cf78b2f3b7e2.html const int WM_NCHITTEST = 0x0084;const int HTLEFT = 10;const int HTRIGHT = 11;const int HTTOP = 12;const int HTTOPLEFT = 13;const int HTTOPRIGHT = 14;const int HTBOTTOM = 15;const int HTBOTTOMLEFT = 0x10;const int HTBOTTOMRIGHT = 17;protected override void WndProc(ref Message m){ base.WndProc(ref m); switch (m.Msg) { case WM_NCHITTEST: Point vPoint = new Point((int)m.LParam & 0xFFFF, (int)m.LParam >> 16 & 0xFFFF); vPoint = PointToClient(vPoint); if (vPoint.X <= 5) if (vPoint.Y <= 5) m.Result = (IntPtr)HTTOPLEFT; else if (vPoint.Y >= ClientSize.Height - 5) m.Result = (IntPtr)HTBOTTOMLEFT; else m.Result = (IntPtr)HTLEFT; else if (vPoint.X >= ClientSize.Width - 5) if (vPoint.Y <= 5) m.Result = (IntPtr)HTTOPRIGHT; else if (vPoint.Y >= ClientSize.Height - 5) m.Result = (IntPtr)HTBOTTOMRIGHT; else m.Result = (IntPtr)HTRIGHT; else if (vPoint.Y <= 5) m.Result = (IntPtr)HTTOP; else if (vPoint.Y >= ClientSize.Height - 5) m.Result = (IntPtr)HTBOTTOM; break; }} 我用在paint方法内使用refresh()出现的是窗口不停的重绘一直不停的闪 试试:this.SuspendLayout();//开始画...// ...// 全部画完this.ResumeLayout(false);this.PerformLayout(); 一般画图都是用双缓冲防止闪烁,如果在大小改变的时候,要更新可以强制重绘(Invalidate)! private void Form1_Paint(object sender, PaintEventArgs e){ e.Graphics.Clear(this.BackColor); // 原来的代码} 你可以在调整大小的时候强制刷新,不行的话你可以看一下你的代码:是不是在绘制的时候坐标使用了Paint方法的参数e的成员如ClipRectangle,或Graphics的成员像ClipBounds什么的来计算坐标,如果有的话问题应该出现在这。你可以修改坐标的计算方式,或在所有绘制前调用SetClip方法将Graphics的Clip重置.你先看一下是不是这个原因吧?不是再找别的方法! FCK使用问题 如何读多节点的XML。 c#操作word 屏蔽快捷键的问题。非webbrowser C#如何改变歌曲版权信息? 新手请教C#程序打包成EXE的问题 急问!!!为什么我的文件编译成功后,却看不到我的界面呢 C#小白问个很菜的问题。大家别笑话啊 图片转为base64编码的文本的问题 怎么把一个字符串里的换行符全部去掉 给个思路,如何禁止鼠标在整个系统中的点击?(不仅仅是本身这个程序) 调试的时候,string无法取对,发现在数值间出现一个小黑色长方形,无法取下来 从网页里提取mp3
http://topic.csdn.net/u/20071020/21/5e94526f-6516-400b-9176-cf78b2f3b7e2.html
const int HTLEFT = 10;
const int HTRIGHT = 11;
const int HTTOP = 12;
const int HTTOPLEFT = 13;
const int HTTOPRIGHT = 14;
const int HTBOTTOM = 15;
const int HTBOTTOMLEFT = 0x10;
const int HTBOTTOMRIGHT = 17;protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
switch (m.Msg)
{
case WM_NCHITTEST:
Point vPoint = new Point((int)m.LParam & 0xFFFF,
(int)m.LParam >> 16 & 0xFFFF);
vPoint = PointToClient(vPoint);
if (vPoint.X <= 5)
if (vPoint.Y <= 5)
m.Result = (IntPtr)HTTOPLEFT;
else if (vPoint.Y >= ClientSize.Height - 5)
m.Result = (IntPtr)HTBOTTOMLEFT;
else m.Result = (IntPtr)HTLEFT;
else if (vPoint.X >= ClientSize.Width - 5)
if (vPoint.Y <= 5)
m.Result = (IntPtr)HTTOPRIGHT;
else if (vPoint.Y >= ClientSize.Height - 5)
m.Result = (IntPtr)HTBOTTOMRIGHT;
else m.Result = (IntPtr)HTRIGHT;
else if (vPoint.Y <= 5)
m.Result = (IntPtr)HTTOP;
else if (vPoint.Y >= ClientSize.Height - 5)
m.Result = (IntPtr)HTBOTTOM;
break;
}
}
试试:this.SuspendLayout();
//开始画...
// ...
// 全部画完
this.ResumeLayout(false);
this.PerformLayout();
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.Clear(this.BackColor); // 原来的代码
}
是不是在绘制的时候坐标使用了Paint方法的参数e的成员如ClipRectangle,或Graphics的成员像ClipBounds什么的来计算坐标,如果有的话问题应该出现在这。
你可以修改坐标的计算方式,或在所有绘制前调用SetClip方法将Graphics的Clip重置.
你先看一下是不是这个原因吧?不是再找别的方法!