首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

控件设置透明后,背景变成黑色了

2014-01-14 
【求助】控件设置透明后,背景变成黑色了。界面刚打开时,文本框背景色是白色的。等鼠标经过文本框后,背景色成为

【求助】控件设置透明后,背景变成黑色了。
界面刚打开时,文本框背景色是白色的。
控件设置透明后,背景变成黑色了
等鼠标经过文本框后,背景色成为黑色的了
控件设置透明后,背景变成黑色了
但是静态文本框就可以。
实在想不出什么方法了,不知道有人遇到过么?




代码也相对简单,就是 OnCtlColor 和 OnEraseBkgnd 这两个函数


#include "stdafx.h"
#include "testbg.h"
#include "Test2.h"


// CTest2 对话框

IMPLEMENT_DYNAMIC(CTest2, CDialog)

CTest2::CTest2(CWnd* pParent /*=NULL*/)
: CDialog(CTest2::IDD, pParent)
{

}

CTest2::~CTest2()
{
}

void CTest2::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(CTest2, CDialog)
ON_WM_ERASEBKGND()
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()


// CTest2 消息处理程序

BOOL CTest2::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

CBitmap m_BkGndBmp;
m_BkGndBmp.LoadBitmap(IDB_BITMAP1);
CRect rcClient;
GetClientRect(&rcClient);
BITMAP bm;
m_BkGndBmp.GetBitmap(&bm);
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap *pOldBmp = memDC.SelectObject(&m_BkGndBmp);
pDC->StretchBlt(0,0,rcClient.Width(),rcClient.Height(),&memDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
memDC.SelectObject(pOldBmp);
memDC.DeleteDC();
return TRUE;
}

HBRUSH CTest2::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO:  在此更改 DC 的任何属性

// TODO:  如果默认的不是所需画笔,则返回另一个画笔
if(nCtlColor == CTLCOLOR_BTN 
|| nCtlColor == CTLCOLOR_STATIC 
|| nCtlColor == CTLCOLOR_EDIT)
{
pDC->SetTextColor(RGB(0,255,255));
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH); 
}

pDC->SetTextColor(RGB(0,0,255));
pDC->SetBkMode(TRANSPARENT);
return hbr;
}


[解决办法]
引用:
将控件所在位置的背景剪出来一块和控件一样大小的图片,贴到控件中

楼上说的对。

像static、radio等可以,但系统的edit是不能这样的。因为你的背景不是纯色的,即使是纯色的,貌似对于edit也不行,你必须对edit进行重绘。

你需要对edit也透明么??
[解决办法]
"对话框里控件的透明" 0分
http://download.csdn.net/detail/schlafenhamster/6541179
“一个不常见的 使 对话框 中 控件 透明的 方法。 通过 CreatePatternBrush 产生一个 背景画刷,对话框和 所有透明控件都使用这个 画刷,非常 简单 有效的 方法。”
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

将控件所在位置的背景剪出来一块和控件一样大小的图片,贴到控件中

楼上说的对。

像static、radio等可以,但系统的edit是不能这样的。因为你的背景不是纯色的,即使是纯色的,貌似对于edit也不行,你必须对edit进行重绘。

你需要对edit也透明么??



是的,我想让edit的背景色也统一起来,不知道怎么处理好点


这个你必须自绘了,因为你的背景不是单色,而是一张图片

你得把edit所在位置区域的背景拷出来贴到edit当中去才行

热点排行