SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000); 
    HINSTANCE   hInst   =   LoadLibrary("User32.DLL");     
    if(hInst)     
{
typedef   BOOL   (WINAPI   *MYFUNC)(HWND,COLORREF,BYTE,DWORD);     
        MYFUNC   fun   =   NULL;   
        //取得SetLayeredWindowAttributes函数指针     
        fun=(MYFUNC)GetProcAddress(hInst,   "SetLayeredWindowAttributes");   
        if(fun)fun(this->GetSafeHwnd(),0,128,0x2);     
        FreeLibrary(hInst); 
}这是我现在所用的方法...由于使用SetWindowLong改变了对话框的属性  因此不能满足我程序的需求 ...
首先我想知道可不可以不用0x80000属性来完成透明对话框的任务
如果不行  我想请教另一种透明的方法  请大家指点

解决方案 »

  1.   

    这样用呢:
    SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE,
    GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE) | WS_EX_LAYERED);
    // Make this window 70% alpha
    ::SetLayeredWindowAttributes(GetSafeHwnd(), 0, (255 * 70) / 100, LWA_ALPHA);
      

  2.   


    WS_EX_LAYERED属性就是0x8000  这种方法就是我的方法  是不可以的
      

  3.   

    又发帖啊?CPoint point; 
    CRgn rgn,tmp; 
    CRect rc; 
    m_Static.GetWindowRect(&rc); 
    rgn.CreateRectRgn(0,0,rc.Width()-1,rc.Height()-1); for(point.x = 0 ; point.x <= rc.Width();point.x++) 

      for(point.y = 0 ; point.y <= rc.Height();point.y++) 
      { 
        if(rc.PtInRect(point)) 
        { 
            tmp.CreateRectRgn(point.x,point.y,point.x+1,point.y+1); 
            rgn.CombineRgn(&rgn,&tmp,RGN_XOR); 
            tmp.DeleteObject(); 
          } 
      } 

    SetWindowRgn((HRGN)rgn,TRUE);
    我想问下楼主 这个你试过没? 我试验的结果是可以实现全部透明
    其中的m_Static为在对话框上拉的一块Static控件的关联变量
      

  4.   


    在一个对话框的InitDialog中return true之前加如上面代码试试先在对话框上拉一个Static框 关联m_Static
      

  5.   

    SetLayeredWindowAttributes,
    要么自绘窗口风格还会影响到程序?
      

  6.   

    如果不想用layeredwindow来做的话,可以在onerasebkgnd里面用alphablend来实现,不过复杂多了...........
      

  7.   

    我觉得不用那个API的话搞起来很麻烦,我觉得该API的原理就是先找到当前窗口盖住的下面的那一部分,把那一部分搞成一个位图取出来,然后再用alpha混合,和当前的窗口来混合,从而产生的半透明效果,导致在当前窗口上能看到背景的部分是什么样子,我以前想过做一个半透明的BUTTON,后来发现用API等等基本搞不定,就算了,我觉得你非要不用API来搞这个东西,真是没有多大必要。
      

  8.   


    我还是没明白m_Static是什么  我把m_Static改成DlgWelcome*   myDlg=   new   DlgWelcome;中的myDlg可是不起作用   而且我的要求是半透明效果
      

  9.   


    你说的这个对我倒是有所启发...现在的问题是这种实现半透明方法在设定对话框WS_EX_LAYERED属性后...对话框总跑到程序的后面去...如果不设置这种属性 ...本来是前端显示的