用bitblt绘图时,运行一会后,窗口里的内容会跑到屏幕左上角?我程序里
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);

//RECT rt;
GetClientRect(hwnd,&rt);
BitBlt(hdc,0,0,rt.right,rt.bottom,mdc,0,0,SRCCOPY);

EndPaint(hWnd, &ps);
break;其中mdc是在WM_CREATE时创建的:是全局变量。
    mdc = CreateCompatibleDC(GetDC(hwnd));
    bmp = CreateCompatibleBitmap(GetDC(hwnd),cw,ch);
    SelectObject(mdc,bmp);
    BitBlt(mdc,0,0,cw,ch,mdc,0,0,WHITENESS);  // cw = 1024; ch = 768我用 _beginthread(MasterThread,0,NULL); 开了一个线程
在这个线程中循环向主窗口发送一个自定义消息,
主窗口在这个消息中重画mdc并使窗口实效
  DrawAll(); // 重画
  RECT rt;
  GetClientRect(hwnd,&rt);
  InvalidateRect(hwnd,&rt,FALSE);在线程循环次数较少时没有什么问题,多于200次后就会把窗口里面的内容画到屏幕左上角了!
不知道大家有没有遇到国这种问题,
realplayer有的时候也会出现这种情况。
怀疑是显卡,换了个好的,循环时没事,完了一拖动窗口,就又跑到屏幕左上角了!请高手指点,给解释一下原理!

解决方案 »

  1.   

    首先要确定 hWnd 是那个窗口的句柄。
    还有你的线程不段的在刷新,很耗资源。建议你把画图的函数放到 OnPaint, 或者 OnDraw, 或者 OnEraseBkgnd 中,不用开线程来处理的。
    下面是画图的一个例子.BOOL CXXXXView::OnEraseBkgnd(CDC* pDC)
    {
    CDC memDC;
    CBitmap bitmap;
    CBitmap* pOldBitmap; if( memDC.CreateCompatibleDC(pDC) )
    {
    CRect rect;
    GetClientRect(&rect);

    if(bitmap.CreateCompatibleBitmap(pDC,rect.right,rect.bottom))
    {
    pOldBitmap = memDC.SelectObject(&bitmap); const int nBoardWidth = BOARD_WIDTH;
    const int nBoardHeight = BOARD_HEIGHT; rect.bottom = rect.bottom;
    memDC.FillRect(&rect,&m_tBkBrush); ////////////////////////////////////////////////
    //把要画图的代码放在这里
                      ////////////////////////////////////////////////

    pDC->BitBlt(rect.left, rect.top, rect.right, rect.bottom,
    &memDC, 0, 0, SRCCOPY); memDC.SelectObject( pOldBitmap ); 
    bitmap.DeleteObject();
    memDC.DeleteDC();
    ReleaseDC(&memDC);
    }
    }
    }
      

  2.   

    用任务管理器是否有GDI泄漏。
      

  3.   


    CRect reWindow;
    GetWindowRect(reWindow);
        CRect desk;
    GetDesktopWindow()->GetWindowRect(desk);
    MoveWindow(desk.Width()-reWindow.Width(),MainHeight,reWindow.Width(),reWindow.Height());
    参考一下
      

  4.   


    楼上是什么意思,用的着去动窗口吗?
    我只是想改正程序而已。请问 DentistryDoctor(雅克医生<改行做程序员了>) 
    如何看GDI泄漏?我感觉就是这个问题
      

  5.   


    刚看了一下,果然,
    GDI对象疯涨!...现在改好了!
    高手就是高手啊,佩服,五体投地!
    一下就说到点子上!100分相送,不成敬意!