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值即可