我编了一个在桌面上显示的时钟就是dc.textout当前的时间,通过一个timer使它总在最前方,但是程序退出时在桌面上留下残余字体,需刷新才能消除,我想通过退出程序前updatewindow来让整个屏幕刷新,但是不能实现.还有,当我设置字体背景色为白时,显示无问题,担当设了dc.SetBkMode(TRANSPARENT);后,虽然透明了,但每秒显示的秒数会残留在屏幕上,应该怎么去除?

解决方案 »

  1.   

    hPMWnd  = FindWindow   ("Progman", "Program Manager");
    hLVWnd   = FindWindowEx (hPMWnd, NULL, "SHELLDLL_DefView", NULL);
    hIconWnd = FindWindowEx (hLVWnd, NULL, "SysListView32",NULL);
    再对hIconWnd对应的窗口Invalidate看看
      

  2.   

    显示之前将原有的背景保存起来,使用dc.SetBkMode(TRANSPARENT); 后先 Bitblt 保存的背景,再显示的时钟
      

  3.   

    没那么复杂啊,我只是在整个屏幕上textout罢了,没有背景图的
      

  4.   

    HWND hPMWnd  = ::FindWindow("Progman", "Program Manager");
    HWND hLVWnd   = ::FindWindowEx (hPMWnd, NULL, "SHELLDLL_DefView", NULL);
    HWND hIconWnd = ::FindWindowEx (hLVWnd, NULL, "SysListView32",NULL);
    CWnd *wnd = CWnd::FromHandle(hIconWnd);
    wnd->Invalidate();上面的代码可以立马刷新桌面。这是因为桌面的最上面的窗口是class名SysListView32
      

  5.   

    to akiy(宏) ( )  不对,便宜后说,没有3个参数的!
      

  6.   

    try this
    ::InvalidateRect(NULL,NULL,TRUE);