hdc = BeginPaint(hwnd ,&ps);
hdcmem = CreateCompatibleDC(hdc);
bmp = CreateBitmap(100, 100, 1, 1, NULL);
SelectObject(hdcmem, bmp);MoveToEx(hdcmem, 1, 1, NULL);
LineTo(hdcmem, 1, 10);nColor = GetPixel(hdcmem, 1, 1);
nColor = GetPixel(hdcmem, 2, 1);DeleteObject(bmp);
EndPaint(hwnd, &ps);这段程序中nColor = GetPixel(hdcmem, 1, 1);nColor = GetPixel(hdcmem, 2, 1);两句得到的值总是一样,不是应该两个点的值不一样么

解决方案 »

  1.   

    看这段代码:    // Create memory DC
        CDC memdc;
        memdc.CreateCompatibleDC(&dc);
        CBitmap* pOldBm = memdc.SelectObject(pBitmap);
     
        // Blast bits from memory DC to target DC.
        // Use StretchBlt if size is different.
        //
        BOOL bRet = FALSE;
        if (rcDst->Size()==rcSrc->Size()) {
           bRet = dc.BitBlt(rcDst->left, rcDst->top,
              rcDst->Width(), rcDst->Height(),
              &memdc, rcSrc->left, rcSrc->top, SRCCOPY);
        } else {
           dc.SetStretchBltMode(COLORONCOLOR);
           bRet = dc.StretchBlt(rcDst->left, rcDst->top, rcDst->Width(),
              rcDst->Height(), &memdc, rcSrc->left, rcSrc->top, rcSrc->Width(),
              rcSrc->Height(), SRCCOPY);
        }
        memdc.SelectObject(pOldBm);
    用了两次SelectObject(注意中间有一个调整的过程)
      

  2.   

    hdcmem = CreateCompatibleDC(hdc);
    bmp = CreateBitmap(100, 100, 1, 1, NULL);
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~这里只是Create了一个新的bmp
    SelectObject(hdcmem, bmp);
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~为设备选中该bmp
    所以,你的bmp根本只是一个没有经过赋值的对象
    里面没有任何东西
    里面的像素当然都是系统初始化它的时侯默认给的值
    所以相同
      

  3.   

    可是
    MoveToEx(hdcmem, 1, 1, NULL);
    LineTo(hdcmem, 1, 10);
    应该向DC中写如了一些数据,怎么会是空白的呢
      

  4.   

    可是
    MoveToEx(hdcmem, 1, 1, NULL);
    LineTo(hdcmem, 1, 10);
    应该向DC中写如了一些数据,怎么会是空白的呢
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
    你是向后台的缓冲hdcmem写数据
    但是并没有向屏幕hdc写啊
    所以要在后面加入
    BitBlt(hdc, xDest,yDest,DestWidth,DestHeight, hdcmem, xSrc,ySrc,SRCCOPY );