关闭

让所有的静态文本都透明好显示背景色

1336人阅读 评论(0) 收藏 举报

让所有的静态文本都透明好显示背景色

一、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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:704406次
    • 积分:5955
    • 等级:
    • 排名:第4408名
    • 原创:1篇
    • 转载:282篇
    • 译文:0篇
    • 评论:48条
    文章分类