VC2008 对话框工程
BOOL CtransparentTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CClientDC dc(this); 
 COLORREF maskColor = RGB(255,255,255);   //掩码颜色 7.     
 SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE, GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)| 0x80000);  //设定窗体使用扩展模式
 HINSTANCE hInst = LoadLibrary(_T("User32.DLL"));  
 if( hInst )  
 {  
 typedef BOOL( WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);  
 MYFUNC AlphaFunc = NULL;  
 AlphaFunc=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");  
if(AlphaFunc)AlphaFunc(this->GetSafeHwnd(),maskColor,255,1);                   //将与掩码颜色相同的窗体部分置为透明
FreeLibrary(hInst);  
}  return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

解决方案 »

  1.   

    // Set WS_EX_LAYERED on this window 
    SetWindowLong(hwnd, 
                  GWL_EXSTYLE, 
                  GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);// Make this window 70% alpha
    SetLayeredWindowAttributes(hwnd, 0, (255 * 70) / 100, LWA_ALPHA);有这两句就OK啦.SetLayeredWindowAttributes 是需要从user32.dll获取的。
      

  2.   

    MSDN上面有说明的,ms-help://MS.MSDNQTR.v90.chs/winui/winui/windowsuserinterface/windowing/windows/usingwindows.htm
    找下SetLayeredWindowAttributes 函数,说明很详细的,耐心看了,你就成长了。希望你可以帮到你哦!
      

  3.   

    yungmode 确实透明了 可是为什么鼠标点到窗口的任何地方时,窗口就马上不见了?请指点,谢谢!
      

  4.   

    请教一个问题:透明窗体覆盖在视频窗体上以后,如何将视频窗体的鼠标操作传给透明窗体呢?postmessage的第一个参数怎么设置呢?谢谢
      

  5.   

    zhaoqiankitty 不好意思 我要结贴了 请你另开一个帖子 非常抱歉
      

  6.   

    BOOL CaaaaDlg::OnInitDialog()
    {
    CDialog::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
    CString strAboutMenu;
    strAboutMenu.LoadString(IDS_ABOUTBOX);
    if (!strAboutMenu.IsEmpty())
    {
    pSysMenu->AppendMenu(MF_SEPARATOR);
    pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    }
    } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
    //  执行此操作
    SetIcon(m_hIcon, TRUE); // 设置大图标
    SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码
    // Set WS_EX_LAYERED on this window  
    SetWindowLong(m_hWnd,  
    GWL_EXSTYLE,  
    GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED); // Make this window 70% alpha
    SetLayeredWindowAttributes(0, (255 * 70) / 100, LWA_ALPHA); return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }我做了Demo,确实没有你说的情况哦,
    你可以重建个试试。 另外,我没有从DLL中导出,vs2008后的编译器是支持SetLayeredWindowAttributes这个函数的。
      

  7.   


    你说的是 透明窗体传给视频窗体吧。 这个需要两个进程同步哦,你的程序可以使用SendInput函数模拟事件给视频窗体.因为最新接收到消息的是透明窗体 哦