MFC将bmp图像设为背景 接着是控件背景透明

1.在ResourseView里添加文件夹,命名为Bitmap

2.将要添加的bmp图像文件拷贝到工程文件res目录中

3.在Bitmap里插入Bitmap资源从res目录中选取刚加入的Bitmap,并命其ID为IDB_BITMAP1(随意)

4.修改CMYDlg::OnPaint()如下:

  else
 {

  // 屏蔽 CDialog::OnPaint();
 // CDialog::OnPaint();

 //添加如下代码:

  CPaintDC dc(this);

        CDC memdc;
        memdc.CreateCompatibleDC(&dc);//创建兼容DC

        CBitmap bkg;
        bkg.LoadBitmap(IDB_BITMAP1);//载入位图

        BITMAP bkginfo;
        bkg.GetBitmap(&bkginfo);//获取位图信息

        memdc.SelectObject(&bkg);

        RECT rect;
        GetWindowRect(&rect);//获取对话框信息

        dc.StretchBlt(0,0,rect.right-rect.left,rect.bottom-rect.top,&memdc,0,0,bkginfo.bmWidth,bkginfo.bmHeight,SRCCOPY);

//添加代码结束

 }

5.编译运行




控件背景透明化

HBRUSH CTransparentCtlDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
//控件背景透明处理开始 -----------------------------------------

if(nCtlColor== CTLCOLOR_STATIC) //如果是静态标签

pDC->SetBkMode(TRANSPARENT);//设置背景模式为透明
return (HBRUSH)GetStockObject(NULL_BRUSH);//返回一个空画刷
}
//控件背景透明处理结束 -----------------------------------------

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
return hbr;
}


本人最终实现的check box 控件透明是如下,不进入ID的原因是因为自己更改了checkbox的ID

进去使用它的旧的宏定义就行。也是在OnCtlColor函数加上:

UINT id;
CRect rc;
CDC* dc = NULL;
id= pWnd->GetDlgCtrlID();
switch (id)
{
case IDC_CHECK1_ETH01://按下的控件
pDC->SetBkMode(TRANSPARENT);
pWnd->GetWindowRect(&rc);
ScreenToClient(&rc);
dc = GetDC();
pDC->BitBlt(0,0,rc.Width(),rc.Height(),dc,rc.left,rc.top,SRCCOPY);//把父窗口背景图片先画到按钮上
ReleaseDC(dc);
hbr = (HBRUSH) ::GetStockObject(NULL_BRUSH);
return hbr;
break;

case IDC_STATIC: 
pDC->SetBkMode(TRANSPARENT);//设置背景模式为透明
return (HBRUSH)GetStockObject(NULL_BRUSH);//返回一个空画刷
break;
default:
break;
}

需要哪个空间透明直接加上它的ID值即可

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值