为什么VC做的半透明窗体点击会变成不透明窗体

iqy 2017-10-05 04:37:55
最近用MFC做了一个半透明窗体,代码如下:
void CS22Dlg::OnOK()
{
this->ShowWindow(SW_MAXIMIZE);//SW_SHOWMINIMIZED
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;
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if(fun)fun(this->GetSafeHwnd(),0,20,2);
FreeLibrary(hInst);
}
//CDialog::OnOK();
}
这段代码,在点击第一次窗体变成半透明窗体,点击第二次变成不透明窗体,第三次第四次依次变化,我需要的是每次点击都是半透明窗体,请高手指教问题出在哪里?
...全文
493 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
red-fly 2017-10-09
  • 打赏
  • 举报
回复
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000); 最后一个参数不对,应该改成: SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE) | 0x80000);
iqy 2017-10-05
  • 打赏
  • 举报
回复
非常感谢schlafenhamster,完全解决了我的问题。
schlafenhamster 2017-10-05
  • 打赏
  • 举报
回复

void  CS22Dlg::OnOK() 
{
//	this->ShowWindow(SW_MAXIMIZE);//SW_SHOWMINIMIZED
	HWND hwnd=this->GetSafeHwnd();
#define   WS_EX_LAYERED 0x00080000
	SetWindowLong(hwnd,GWL_EXSTYLE,GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);   	
	HINSTANCE hInst=LoadLibrary("User32.DLL");     
	if(hInst)     
	{ 
		typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);     
		MYFUNC fun = NULL;          
		fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");   
#define LWA_ALPHA 2
        if(fun) fun(hwnd,RGB(0,0,0),30,LWA_ALPHA); //透明度1-30,透明方式2 
//
		FreeLibrary(hInst);
	}
	//	CDialog::OnOK();
}
GWL_EXSTYLE)^0x80000 是 异或 !(一次0,一次1)

15,979

社区成员

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

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