有时候我们会界面过于简单单调,所以我们在程序中经常要美化界面,下面介绍几种贴位图的方式:
1.picture控件:直接在想要贴图的地方拖一个picture控件,然后选一张位图过去即可。
2.CDC::BitBlt
BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );
这个函数是不按位图的大小给贴过去的,不会进行位图拉伸的。
示例:
if (bmp.LoadBitmap(IDB_BITMAP1))
{
BITMAP bmpInfo;
bmp.GetBitmap(&bmpInfo); //获取位图的大小
CDC dcMemory;
dcMemory.CreateCompatibleDC(pDC); //创建兼容DC
CBitmap* pOldBitmap = dcMemory.SelectObject(&bmp);
CRect rect;
GetClientRect(&rect);
int nX = rect.left + (rect.Width() - bmpInfo.bmWidth) / 2;
int nY = rect.top + (rect.Height() - bmpInfo.bmHeight) / 2;
pDC->BitBlt(nX, nY, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory, 0, 0, SRCCOPY);
dcMemory.SelectObject(pOldBitmap);
}
else
TRACE0("ERROR: Where's IDB_BITMAP1?\n");
3.CDC::StretchBit
BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop );
这个函数是BitBlt的扩展,比BitBlt功能更强大,可以对位图进行拉伸,以匹配窗口的大小。示例:
void CAdminDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CBitmap bmp;
CDC dcSrc;
bmp.LoadBitmap(IDB_BITMAP2);
dcSrc.CreateCompatibleDC(&dc);
dcSrc.SelectObject(&bmp);
BITMAP bitmap;
bmp.GetBitmap(&bitmap);
CRect rect;
GetClientRect(&rect);
dc.StretchBlt(0, 0, rect.Width(), rect.Height(), &dcSrc, 0, 0, bitmap.bmWidth, bitmap.bmHeight, SRCCOPY);
}