向各位大虾请教一个问题,如何象phtoshop那样在客户区拉出一个矩形窗口后,再该拉出的区域中用半透明颜色填充。谢谢

解决方案 »

  1.   

    BOOL CYourDlg::OnInitDialog()
    {
             CDialog::OnInitDialog();         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, 192, 2); 
    FreeLibrary(hInst); 
    }
    }
      

  2.   

    呵呵, 被楼上的占先了.
    void TransparencyWindow(HWND hWnd)
    {
    typedef BOOL (WINAPI *MYFUNC)(HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
    HINSTANCE hInstance = LoadLibrary("user32.dll");
    MYFUNC TransWindow;
    TransWindow = (MYFUNC)GetProcAddress(hInstance, _T("SetLayeredWindowAttributes"));
    if (TransWindow)
    {
    SetWindowLong(hWnd, GWL_EXSTYLE, (GetWindowLong(hWnd, GWL_EXSTYLE))|0x80000L);
    TransWindow(hWnd, 255, (255*80)/100, 0x02);
    FreeLibrary(hInstance);
    }
    }调用时传递你的窗口句柄进去..