实际上,它是画了的,但是当你的函数结束以后, DesktopWindow会自动重画。就把你画的
摸掉了。
不信你可以在你的函数里多画一些东西,中间用sleep。

解决方案 »

  1.   

    CDC SCreenDC;   
    SCreenDC.CreateDC("DISPLAY",NULL,NULL,NULL);   //创建屏幕的设备上下文
    CDC memDC;//定义一个兼容DC
    memDC.CreateCompatibleDC(&SCreenDC);//创建DC
    CBitmap bmpDraw;
    bmpDraw.LoadBitmap(IDB_BITMAP1);//装入DDB
    CBitmap* pbmpOld=memDC.SelectObject(&bmpDraw);//保存原有DDB,并选入新DDB入DC
    pDC->BitBlt(0,0,32,32,&memDC,0,0,SRCCOPY);   //现在可以随心所欲的画了
    memDC.SelectObject(&bmpOld);
      

  2.   

    不过偶同意Happy_Wawe(十一少)的观点
    任何刷新都会导致屏幕重画
      

  3.   

    各位老兄:有这么复杂吗??
    CDC *pDC = CDC::FromHandle(::GetDC(NULL));
      

  4.   

    HDC hdc = ::GetDC(0);
    用hdc画画,比如::TextOut(hdc......画完之后任何一个鼠标动作都会导致窗口重画
    所以你需要把桌面窗口锁住,禁止它重画//画画之后琐住桌面
    ::LockWindowUpdate(::GetDesktopWindow());
    //下面操作解锁
    ::LockWindowUpdate(NULL);
    //下面操作刷新整个桌面
    ::InvalidateRect(0,NULL,0); 
      

  5.   

    画完以后在强制整个屏幕有效不行吗?
    RECT rc;
    HWND hWnd = GetDesktopWindow();
    GetClientRect(hWnd,&rd);
    //drawing here
    ValidateRect(hWnd,&rc);或者干脆SubClass桌面的窗口,在CallWindowProc调用原来的窗口函数以后再自己“添足”噢!
      

  6.   

    没用的GetDeskTopWindow(),因为上面有时候已经有很多看上去透明的窗口了以前在VB下面,我试过GetDC(0);得到的就是屏幕的DC,然后在上面LineTo()什么的,
    确实可以的