可切换背景窗口透明问题。。。请大大帮忙解决

wangyujonny 2011-11-29 03:54:14
我这样实现了背景切换,然后又实现了窗口透明,可是只有第一个背景时候窗口是透明的,换了图片后就报错,点忽略图片换了可是不透明了。。。这是为什么呢?大大们帮帮忙 呃。

背景图片实现:

BOOL CCalendarDlg::OnInitDialog()
CBitmap bmp;
bmp.LoadBitmap(m_nBkResID);
m_brBk.CreatePatternBrush(&bmp);
bmp.DeleteObject();

void CCalendarDlg::OnBnClickedChangebk()
{
// TODO: 在此添加控件通知处理程序代码
if ( m_nBkResID == IDB_BK1)
{
m_nBkResID = IDB_BK2;
}
else if(m_nBkResID == IDB_BK2)
{
m_nBkResID = IDB_BK3;
}
else
{
m_nBkResID = IDB_BK1;
}

OnInitDialog();
Invalidate(TRUE);
}


实现透明:


BOOL CCalendarDlg::OnInitDialog()
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
HINSTANCE hInst = LoadLibrary("User32.DLL");
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//取得SetLayeredWindowAttributes函数指针
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if(fun)
fun(this->GetSafeHwnd(),0,200,2);
FreeLibrary(hInst);
}

void CCalendarDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
BYTE m=(BYTE)m_sld.GetPos();
HINSTANCE hInst = LoadLibrary("User32.DLL");
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes"); //取得SetLayeredWindowAttributes函数指针
if(fun)
fun(AfxGetMainWnd()->GetSafeHwnd(),0,m*2,2);

FreeLibrary(hInst);
};
CString str;
str.Format("窗体的透明度:%%%d",100 * m / 500);
SetDlgItemText(IDC_TOUMING,str);
...全文
97 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧