实现窗口的“淡出”,我们需要在创建窗口时指定窗口样式,这可以在窗口过程中创建或者初始化消息中处理,对于对话框程序,代码如下:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
INT_PTR CALLBACK DlgProc(HWND hDlg,UINT Msg,WPARAM wParam,LPARAM lParam)
{
switch(Msg)
{
case WM_INITDIALOG:
{
//添加菜单等 //将窗口设置为图层窗口样式
SetWindowLong(hDlg,GWL_EXSTYLE,::GetWindowLong(hDlg, GWL_EXSTYLE) | WS_EX_LAYERED);
return true;
}
case WM_CLOSE:
{
//使窗口渐渐变得透明,然后关闭!!!!
for(int i=100;i>0;i--)
SetLayeredWindowAttributes(hDlg,0, 255*i/100, LWA_ALPHA);
//发送WM_QUIT消息,使消息循环结束,程序退出!
PostQuitMessage(0);
return true;
}
}
return false;
}
实现窗口的“淡入”效果的代码如下,在WinMain函数中,我们使用如下代码:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
int CALLBACK WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int ShowCmd)
{
//注册窗口类
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/dot.gif)
MainForm=CreateDialog(hInstance,(LPCTSTR)IDD_MAINFORM,NULL,DlgProc);
//显示前先将窗口设为透明度为0!
SetLayeredWindowAttributes(MainForm,0,0, LWA_ALPHA);
//显示窗口
ShowWindow(MainForm,SW_SHOW);
//使窗口从透明逐渐浮现!
for(int i=0;i<=100;i++)
SetLayeredWindowAttributes(MainForm,0, 255*i/100, LWA_ALPHA);
//消息循环
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/dot.gif)
return 0;
}
===================================
补充 by hoodlum1980 2008年12月22日18:40:30
===================================
另外,不使用图层窗口,可以使用 AnimateWindow 这个 API 函数来完成类似功能:
例如:AnimateWindow(hDlg, 200, AW_HIDE | AW_BLEND); //使窗口渐隐。