一、CStatic从文件夹加载位图
HBITMAP hbitmap;
//获得指向静态控件的指针
CStatic *pStatic=(CStatic *)GetDlgItem(IDC_SHOWBMP);
//获得位图句柄
HBITMAP Bitmap;
//设置静态控件的样式,使其可以使用位图,并试位标显示使居中
pStatic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);
//设置静态控件显示位图
pStatic->SetBitmap(hBitmap);
二、设置对话框背景(小图可以漫延填充)
1、把你的图包含到程序的“Bitmap资源”里,提示说该资源使用了大于256色的调色板,在VC里无法编辑等等,点确定就可以
2、定位到 void CXXXDlg::OnPaint(),在if()...else()中的else()下添加如下代码
else
{
//CDialog::OnPaint();//要禁止这个调用
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap bmpBackground;
bmpBackground.LoadBitmap(IDB_BITMAP);
//IDB_BITMAP是你自己的图对应的ID
BITMAP bitmap;
bmpBackground.GetBitmap(&bitmap);
CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,
bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
}
三、CStatic控件透明
可以这样作的:
HBRUSH CShutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
//让所有的静态文本都透明好显示背景色
if(nCtlColor == CTLCOLOR_DLG)
{
//返回对话框的颜色
hbr=(HBRUSH)::CreateSolidBrush(RGB(146,161,202));
}
if(nCtlColor==CTLCOLOR_STATIC)
{
//让静态文本框透明
pDC->SetBkMode(TRANSPARENT);
//pDC->SetTextColor(RGB(255,255,255)); //设置字体颜色白色
hbr=(HBRUSH)::GetStockObject(NULL_BRUSH);
}
if (nCtlColor==CTLCOLOR_EDIT)//设置EDIT控件的颜色
{
HBRUSH hbr1 = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
hbr1=(HBRUSH)::CreateSolidBrush(RGB(0,0,0)); //背景黑色
pDC->SetTextColor(RGB(255,255,255)); //文字白色
pDC->SetBkMode(TRANSPARENT);
return hbr1;
}
return hbr;
}
四、CStatic背景透明后文本覆盖的问题
http://blog.vckbase.com/hatemath/archive/2005/08/04/10485.aspx