我用以下代码在Desktop上写字:
CWnd *pwndDesktop=CWnd::FromHandle(::GetDesktopWindow());
CWindowDC dc(pwndDesktop);
dc.TextOut(100,100,_T("Hello Windows 2000!"));
pwndDesktop->Invalidate();
pwndDesktop->UpdateWindow();
Sleep(2000);
dc.TextOut(100,100,_T("Hello Windows!"));
pwndDesktop->Invalidate();
pwndDesktop->UpdateWindow();
桌面不理会我发送的刷新消息,没有把上次写的字去掉,所以第二次显示字的时候,多了一个"2000",请问如何让Desktop刷新???????

解决方案 »

  1.   

    pwndDesktop->RedrawWindow();
      

  2.   

    试试看使用变量保存字符串的值
    ---------------------------------------
             char szTxt[256];
             CWnd *pwndDesktop=CWnd::FromHandle(::GetDesktopWindow());
    CWindowDC dc(pwndDesktop);
             strcpy(szTxt,"Hello Windows 2000!");
    dc.TextOut(100,100,szTxt);
    pwndDesktop->Invalidate();
    pwndDesktop->UpdateWindow();
    Sleep(2000);
             strcpy(szTxt,"Hello Windows!");
    dc.TextOut(100,100,szTxt);
    pwndDesktop->Invalidate();
    pwndDesktop->UpdateWindow();
      

  3.   

    to cadinfo:不行的,关键是桌面窗口不理会我的刷新消息,也就是如何让桌面进行刷新
      

  4.   

    HWND hDesktopWnd;
      if (FindDesktop(hDesktopWnd)==TRUE)
      {
      InvalidateRect(hDesktopWnd,NULL,TRUE); 
      //刷新桌面窗口
      }
      

  5.   

    To jennyvenus(JennyVenus) :FindDesktop()在那里定义的?我机子上没有
    再说如果我用
    CWnd *pwndDesktop=CWnd::FromHandle(::GetDesktopWindow());
    InvalidateRect(pwndDesktop.GetSafeHwnd(),NULL,TRUE);
    来刷新,它也不起作用呀?
      

  6.   

    第二次写的字比第一次的短应该不会覆盖吧?还有
    InvalidateRect(pwndDesktop.GetSafeHwnd(),NULL,TRUE);
    为什么不用
    pwndDesktop->InvalidateRect(NULL) ?
      

  7.   

    to Wj59(wj59):
    我加了pwndDekstop->SetFocus()也没有作用to cooljjyy:
    用这两个没有什么区别,我需要的结果是我第二次写字的时候,第一次写的字要被更新掉
      

  8.   

    CWnd *pwndDesktop=CWnd::FromHandle(::GetDesktopWindow());
    CWindowDC dc(pwndDesktop);难道这个dc不是桌面的DC?那请问如何刷新当前背景呢?
      

  9.   

    CWnd *pwndDesktop=CWnd::FromHandle(::GetDesktopWindow());
    CWindowDC dc(pwndDesktop);
    这个DC确实不能用来刷新桌面。直接用CWindowDC dc(NULL)应该可以了。另外如果想得到桌面DC就直接用HDC hDC=GetDC(NULL)就可以。