怎么让自定义控件透明

 我来答
小熙ps
2017-06-04 · 知道合伙人软件行家
小熙ps
知道合伙人软件行家
采纳数:966 获赞数:9282
毕业于湖南信息职业技术学院,专业计算机网络技术,在IT领域已经专注3年,对各种IT行业都有所了解 。

向TA提问 私信TA
展开全部
//这是自定义控件里添加的自定义函数
/********************************************
函数说明: 绘制透明窗体
*********************************************
返回类型: 返回值为BOOL类型
*********************************************
参数个数,参数类型及说明: 参数一为HWND类型的,表示窗口句柄,参数二是BYTE类型的,表示透明度
*********************************************/

BOOL CPanel::DrawTransprentDlg(HWND hWnd,BYTE transprt)
{
m_brush.CreateSolidBrush(RGB(255,0,255));//背景设置为粉红色

//SetWindowsLong将窗体设置为层级窗体
DWORD dwExStyle = GetWindowLong(hWnd,GWL_EXSTYLE);//获取窗体信息
SetWindowLong(hWnd,GWL_EXSTYLE,dwExStyle|0x80000);//去掉当前窗口一个属性,原属性和

//设置透明色:
//用SetLayeredWindowAttributes设置透明色为0,它比UpdateLayeredWindow的使用要简单些
HMODULE hInst= LoadLibrary(_T("User32.DLL"));//加载动态链接库

typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);//定义函数指针类型
MYFUNC SetLayeredWindowAttributes = NULL;//定义一个该函数指针类型的变量

//得到动态连接库的SetLayeredWindowAttributes函数,用SetLayeredWindowAttributes指向它
SetLayeredWindowAttributes = (MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");

SetLayeredWindowAttributes(hWnd,150,0,1);//调用SetLayeredWindowAttributes函数
//SetLayeredWindowAttributes(hWnd,0,transprt,ULW_ALPHA);
FreeLibrary(hInst);//释放DLL
return true;
}

//这是在初始化的时候创建以及让自定义控件透明,但是没有反应,大家来看看怎么回事
// TODO: 在此添加额外的初始化代码

//m_PanelDemo
m_PanelDemo.ShowWindow(SW_HIDE);

CRect rec;
GetClientRect(&rec);
CPanel* panel = new CPanel();
panel->Create(L"CPanel",L"CustomDlg",CS_HREDRAW | CS_VREDRAW | CS_OWNDC,rec,this,IDC_CUSTOM_NEW);
panel->ShowWindow(SW_SHOW);
panel->DrawTransprentDlg(panel->GetSafeHwnd(),0);
//设置button在最顶层
GetDlgItem(IDC_BUTTON2)->SetWindowPos(&wndTop,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);
//GetDlgItem(IDC_CUSTOM1)->SetWindowPos(&wndBottom,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式