要实现对话框淡入浅出效果, 还是挺简单的, 说白了, 就是在对话框初始化时候加个定时器, 在对话框销毁前也加个定时器, 定时器的操作, 无非就是更新对话框界面的透明度, 要改变对话框的透明度, 用一个API就搞定了:SetLayeredWindowAttributes

恩, 思路就是这样, 这里上关键代码吧
typedef BOOL (__stdcall *FunSetLayeredWindowAttributes)(HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
FunSetLayeredWindowAttributes funSetLayeredWindowAttributes;
funSetLayeredWindowAttributes 
=  (FunSetLayeredWindowAttributes)GetProcAddress(GetModuleHandle("user32.dll"), "SetLayeredWindowAttributes");ModifyStyleEx(NULL, 0x80000/*WS_EX_LAYERED*/); //窗口要有WS_EX_LAYERED属性才能用设置透明的那个API

enum{IDT_SHOW = 100, IDT_EXIT = 101};
在OnInitDialog方法里面添加一个定时器

SetTimer(IDT_SHOW, 50, NULL);

同样, 在OnCancel方法里面添加一个定时器, 顺便把IDT_SHOW定时器给KILL掉
KillTimer(IDT_SHOW);
SetTimer(IDT_EXIT, 
50, NULL);

OnTimer方法这样写:
switch(nIDEvent)
{
case IDT_SHOW:
    funSetLayeredWindowAttributes(
this->m_hWnd, 0, m_current % 2552);
    m_current 
+= 5;
        
    
if(m_current >= 255)
        KillTimer(IDT_SHOW);
    
break;
case IDT_EXIT:
    m_current 
-= 5;
    funSetLayeredWindowAttributes(
this->m_hWnd, 0, m_current % 2552);
    
if(m_current <= 5)
    {
        CDialog::OnCancel();
        KillTimer(IDT_EXIT);
    }
    
break;
}

很简单吧, 一个淡入浅出效果就出来了

另:
static控件背景透明
添加WM_CTLCOLOR消息映射
ON_WM_CTLCOLOR()
添加响应函数
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);

实现响应函数
if(IDS_STATIC == pWnd->GetDlgCtrlID())
{
    pDC
->SetBkMode(TRANSPARENT);
    
return (HBRUSH)::GetStockObject(NULL_BRUSH);
}


这里, 封装了一个基类, 方便以后用
FadeIODlg.h
#pragma once

class CFadeIODlg : public CDialog
{
    DECLARE_MESSAGE_MAP()
public:
    CFadeIODlg(UINT uDLGID, CWnd
* pParent = NULL);
    
virtual ~CFadeIODlg();

protected:
    
virtual void DoDataExchange(CDataExchange* pDX);
    
virtual void OnCancel();
    
virtual void OnOK();

    afx_msg BOOL OnInitDialog();
    afx_msg 
void OnTimer(UINT nIDEvent);    

private:
    
enum{ TIME_BEGIN = 100, TIME_END = 101};
    typedef BOOL (__stdcall 
*FUNSetLayeredWindowAttributes)(HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
    FUNSetLayeredWindowAttributes m_funTransparent;
    
    
enum{
        MAX_TRANSPARENT 
= 255,        //最大透明度
        NUM_BEGIN = 10,                //开始计时器时间间隔
        NUM_END = 10,                //结束计时器时间间隔
        NUM_CHANGE = 5,                //改变透明度
    };

    
int            m_currentTransparent;    //当前窗口透明度
};


FadeIODlg.cpp
#include "stdafx.h"
#include 
"UI.h"
#include 
"FadeIODlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


CFadeIODlg::CFadeIODlg(UINT uDLGID, CWnd
* pParent /* = NULL */)
    : CDialog(uDLGID, pParent)
{}

CFadeIODlg::
~CFadeIODlg()
{}

void CFadeIODlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(CFadeIODlg, CDialog)
    ON_WM_TIMER()
END_MESSAGE_MAP()

BOOL CFadeIODlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    ModifyStyleEx(
00x80000);
    m_currentTransparent 
= 0;
    m_funTransparent 
= (FUNSetLayeredWindowAttributes)GetProcAddress(GetModuleHandle("User32.dll"), "SetLayeredWindowAttributes");
    
if(m_funTransparent)
    {
        
//m_funTransparent(this->GetSafeHwnd(), 0, 0, 2);
        SetTimer(TIME_BEGIN, NUM_BEGIN, NULL);
    }

    
return TRUE;
}

void CFadeIODlg::OnTimer(UINT nIDEvent)
{
    
switch(nIDEvent)
    {
    
case TIME_BEGIN:
        
if(m_currentTransparent <= MAX_TRANSPARENT)
        {
            m_funTransparent(
this->GetSafeHwnd(), 0, m_currentTransparent, 2);
            m_currentTransparent 
+= NUM_CHANGE;
        }
        
else
            KillTimer(TIME_BEGIN);
        
break;
    
case TIME_END:
        
if(m_currentTransparent >= 0)
        {
            
if(m_currentTransparent > MAX_TRANSPARENT)
                m_currentTransparent 
= MAX_TRANSPARENT;
            m_funTransparent(
this->GetSafeHwnd(), 0, m_currentTransparent, 2);
            m_currentTransparent 
-= NUM_CHANGE;
        }
        
else
        {
            KillTimer(TIME_END);
            CDialog::OnCancel();
        }
        
break;
    }
}

void CFadeIODlg::OnOK()
{
}

void CFadeIODlg::OnCancel()
{
    
if(m_funTransparent)
    {
        KillTimer(TIME_BEGIN);
        SetTimer(TIME_END, NUM_END, NULL);
    }
    
else
        CDialog::OnCancel();
}


ok, 完成, 以后直接继承这个对话框, 稍微修改一下, 效果就出来了