当前位置:C++技术网 > 资讯 > 半透明窗口的设计

半透明窗口的设计

更新时间:2015-10-29 22:54:38浏览次数:1+次

我们基于对话框创建工程,命名为RunDlg,然后我们新建一个基于对话框的类CRunDlg类,接着我们在其中建立一个WM_TIMER的消息响应函数,代码如下:


void CRunDlg::OnTimer(UINT nIDEvent) 
{
	CDialog::OnTimer(nIDEvent);
	m_nCounter++;
	if (m_nCounter > 10)
	{
		KillTimer(1);
		OnCancel();
	}	
}
当然我们得先在OnInitDialog函数中,添加定时器代码的声明:



SetTimer(1, 500, NULL);	
还有在头文件中声明变量:



int		m_nCounter;
并在构造函数中初始化为0;


接着我们在OnInitDialog函数中添加最重要的代码:

	SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE)|0X80000);
	
	typedef BOOL (WINAPI* funSetLayeredWindowAttributes)(HWND, COLORREF, BYTE, DWORD);
	funSetLayeredWindowAttributes  SetLayeredWindowAttributes;
	HINSTANCE hInst = LoadLibrary("User32.dll");
	if (hInst)
	{
		SetLayeredWindowAttributes = (funSetLayeredWindowAttributes)GetProcAddress(hInst, "SetLayeredWindowAttributes");
		if (SetLayeredWindowAttributes)
		{
			SetLayeredWindowAttributes(GetSafeHwnd(), RGB(0, 0, 0), 128, 2);
			FreeLibrary(hInst);
		}
	}
对于这些代码,我在《SetLayeredWindowAttributes函数创建半透明窗口》一文中,做了详细的解释,你要看看!


好了最后得一句代码,我们在程序代码运行的首站点--APP类的InitInstance函数中,创建对话框:

CRunDlg runDlg;
runDlg.DoModal();
最后我们看下运行效果: