请教!有一个程序被别的东西挡住之后自己不会刷新,我能写个程序让他刷新吗?谢谢!

解决方案 »

  1.   

    我试着这样:
    VOID CALLBACK myTimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
    {    if(idEvent==1)
    {
    HWND hWnd =::FindWindow(NULL,"chat");
    CWnd* MyWnd;
      MyWnd=CWnd::FromHandle(hWnd);
    //::SendMessage(hWnd, WM_PAINT, 0, 0);//这句无作用。
    MyWnd->Invalidate();//用了这句以后,有两个问题,如下:
             }
    }
    问题1:chat程序有两个窗口阿A和B。其他程序C.
    在A里面,好像是成功了,的确不停得在刷新,任何东西都不能盖在上面了(但C的确又在A德上面,因为我用鼠标点一下C的位置,C会闪一下,但马上又被刷新了)……(问题1)在B里面,问题依然存在,被一个东西C挡住了,就停止了刷新,我拖动C,结果屏幕上全是C残像.问题依然存在。莫非不是用的Invalidate来控制?我又试了UpdateWindow,还是没有作用。(问题2)请大侠们帮忙啊!
      

  2.   

    为什么不这样想:改写你的程序,让它可以自动刷新。
    一般都要在WM_PAINT的消息处理函数中写上刷新的代码。
      

  3.   

    :-) 那是个什么程序,居然自己不会刷新的?你可以得到他的句柄,HWND CWnd *再让他刷新(Invalidate)就是啦。
      

  4.   

    问题1:在你调用以上代码后再调用Invalidate刷新一下你自己。
    问题2:用FindWindowEx可以找到B窗口的句丙,然后也刷新它一下。
      

  5.   

    不行,程序好像不是使用的Invalidate....
      

  6.   

    既然你的窗口已经被别的窗口挡住了,你还要刷新他干什么啊??你在怎么刷新别人也看不到啊.
    如果你是想让别的窗口不能盖住你的窗口的话,你应该是给窗口加上一个TOPMOST风格.至于你说B窗口上面留下的是一些残影,有两个可能,第一是你的B窗口没有响应WM_PAINT消息,
    第二是在MFC中你没有响应WM_ERASEBKGND消息.(重载了消息处理函数,但是没有做处理)
      

  7.   

    先把它弄到最上一层来:
    HWND handle=FindWindowEx(NULL,NULL,NULL,"Winamp 播放清单编辑器");
    if(handle)
    {
    ::ShowWindow(handle,SW_SHOWNORMAL);
    ::SetForegroundWindow(handle);
    }
      

  8.   

    系统冒出来字后Invalidate,不用时刻刷新
      

  9.   

    有些程序不是前台窗口时是不刷新的,他可能就根本不响应onpaint,比如一些opengl庫里的窗口。他们自己写了消息循环,过驴了wm_paint消息。
    如果是这样的程序是不能通过发消息解决的,只能把他激活为前面的窗口,分析到这后,如何激活楼上几位都有不同方法,我不说了。刷新以后,再还原。
    不过,这种根新,实时性不是很好,但只能这样。