有一个需求,让对话框一半透明,一半不透明(上半部不透明,下半部透明化),有没有人做过这方面的程序?介绍点经验?

解决方案 »

  1.   

    COLORREF maskColor = RGB(255,0,255);   //掩码颜色

    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 AlphaFunc = NULL; 
    AlphaFunc=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes"); 
    if(AlphaFunc)AlphaFunc(this->GetSafeHwnd(),maskColor,255,1);                   //将与掩码颜色相同的窗体部分置为透明
    FreeLibrary(hInst); 
    } SetWindowLong( this->GetSafeHwnd(),GWL_EXSTYLE, Style );
    将上面的代码放到OnPaint里面 在代码之前 将对话框的下半部分 绘制成maskColor对应的颜色即可