我们基于对话框创建工程,命名为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();
最后我们看下运行效果: