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);两句得到的值总是一样,不是应该两个点的值不一样么
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);两句得到的值总是一样,不是应该两个点的值不一样么
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(注意中间有一个调整的过程)
bmp = CreateBitmap(100, 100, 1, 1, NULL);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~这里只是Create了一个新的bmp
SelectObject(hdcmem, bmp);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~为设备选中该bmp
所以,你的bmp根本只是一个没有经过赋值的对象
里面没有任何东西
里面的像素当然都是系统初始化它的时侯默认给的值
所以相同
MoveToEx(hdcmem, 1, 1, NULL);
LineTo(hdcmem, 1, 10);
应该向DC中写如了一些数据,怎么会是空白的呢
MoveToEx(hdcmem, 1, 1, NULL);
LineTo(hdcmem, 1, 10);
应该向DC中写如了一些数据,怎么会是空白的呢
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
你是向后台的缓冲hdcmem写数据
但是并没有向屏幕hdc写啊
所以要在后面加入
BitBlt(hdc, xDest,yDest,DestWidth,DestHeight, hdcmem, xSrc,ySrc,SRCCOPY );