如题

解决方案 »

  1.   

    this.Invalidate(rect);
    使用API就是InvalidateRect
    如果需要同时刷新rect中子控件,应该使用
    this.Invalidate(rect,true);
    使用API则应该是RedrawWindow
    可以用Reflector观察Control.Invalidate作参考
      

  2.   

    dfsafdsfds
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
      

  3.   

    将要刷新的区域设成Invalid 在下次OnPaint过程中就会被重画
      

  4.   

    哪位仁兄可否在C#里面帮我试下, 我试过很多方法,InvalidateRect,UpdateWindow,RedrawWindow,可不知道是不是我的参数,老是刷新不了,已经有好几天了都没有搞定,我要刷新的是整个屏幕的一部分,全屏也行,但不仅是当前窗体。
      

  5.   

    如果想要刷新整个屏幕的一部分 可以采用这样的办法:
    创建一个没有Border和Caption 并且设置了TOPMOST的窗口,使它的大小和位置符合你要求的矩形区域,在程序中显示/隐藏这个窗口即可
      

  6.   

    试下这个方法
    调用 windows api GetDesktopWindow 获取桌面窗口句柄
    调用 api InvalidateRect  参数hwnd为桌面句柄使桌面具体区域无效
    rect为screen区域 需要clienttoscreen进行转换.
      

  7.   

    闪烁是可以避免的 要点是
      1.ShowWindow时应当使用SW_SHOWNA(或者使用SetWindowPos和SWP_SHOWWINDOW|SWP_NOACTIVATE)
      2.创建窗口时应该指定不重画背景,窗口响应WM_PAINT/WM_ERASEBKGND之类消息时也不进行填充操作。看起来直接使用API来创建的Window 而非Form类来作为这个遮盖窗口会比较合适。通过显示/隐藏一个浮动窗口来实现刷新的方式是被广泛使用的 一种典型的例子是诸多翻译软件的屏幕取词功能,往往就是以这种方式来促使目标窗口进行绘制字符串API调用。
      

  8.   

    全屏刷新,引入user32.dll的RedrawWindow,定义如下
    [DllImport("user32.dll", EntryPoint = "RedrawWindow")]
            public static extern bool RedrawWindow(int hWnd, IntPtr prect, IntPtr hrgnUpdate, uint flags);要刷新调用代码如下RedrawWindow(0, IntPtr.Zero, IntPtr.Zero, 4 | 1 | 128);
      

  9.   

    hWnd参数可以通过api GetDesktopWindow获得,效果和传入的0是一样的