VC/MFC界面美化之贴图

有时候我们会界面过于简单单调,所以我们在程序中经常要美化界面,下面介绍几种贴位图的方式:

1.picture控件:直接在想要贴图的地方拖一个picture控件,然后选一张位图过去即可。

2.CDC::BitBlt

BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );

这个函数是不按位图的大小给贴过去的,不会进行位图拉伸的。

示例:

CBitmap bmp;
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);
}


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值