我自己绘制了winform界面,在Paint方法里面手工绘制了各个部分,当我改变窗口大小的时候,有些部分再新的窗口大小相对位置又重新出现了图片,但是在原来那个地方的图片没有消失,我想问各位大虾,在窗口重绘的时候应该怎么让窗口刷新啊?

解决方案 »

  1.   

    refresh(); 
    http://topic.csdn.net/u/20071020/21/5e94526f-6516-400b-9176-cf78b2f3b7e2.html
      

  2.   

    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;
        }
    }
      

  3.   

    我用在paint方法内使用refresh()出现的是窗口不停的重绘一直不停的闪
      

  4.   


    试试:this.SuspendLayout();
    //开始画...
    // ...
    // 全部画完
    this.ResumeLayout(false);
    this.PerformLayout();
      

  5.   

    一般画图都是用双缓冲防止闪烁,如果在大小改变的时候,要更新可以强制重绘(Invalidate)!
      

  6.   


    private void Form1_Paint(object sender, PaintEventArgs e)
    {
       e.Graphics.Clear(this.BackColor);   // 原来的代码
    }
      

  7.   

    你可以在调整大小的时候强制刷新,不行的话你可以看一下你的代码:
    是不是在绘制的时候坐标使用了Paint方法的参数e的成员如ClipRectangle,或Graphics的成员像ClipBounds什么的来计算坐标,如果有的话问题应该出现在这。
    你可以修改坐标的计算方式,或在所有绘制前调用SetClip方法将Graphics的Clip重置.
    你先看一下是不是这个原因吧?不是再找别的方法!