董小姐唱的什么意思:在vc中,我要用cdc给CStatic控件加载位图,在SelectObject()后,为什么还要BitBlt()呢?

来源:百度文库 编辑:高校问答 时间:2024/05/03 03:44:08
代码如下:
CRect rect;
GetDlgItem(STC_BMP)->GetClientRect(&rect);

HDC hDC = ::GetDC(::GetDlgItem(m_hWnd, STC_BMP));
HDC hMemDC = CreateCompatibleDC(hDC);

HBITMAP hBmp = (HBITMAP)LoadImage(AfxGetInstanceHandle(), g_szBmpName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
HBITMAP hOldBmp = (HBITMAP)SelectObject(hMemDC, hBmp);

BitBlt(hDC, 0, 0, rect.Width(), rect.Height(), hMemDC, 0, 0, SRCCOPY);
SelectObject(hMemDC, hOldBmp);
DeleteObject(hBmp);
DeleteDC(hMemDC);
::ReleaseDC(::GetDlgItem(m_hWnd, STC_BMP), hDC);

select只是选入DC,要把它显示出来,还是要调用Bitblt,将memDC里面的东西贴出来的。

深绿青蓝说的对,select就相当于我选了支笔,选好笔还要画吧,BitBlt就是用笔来画了。

以上两位说的很对