建立了一个对话框,属性设置为没有边框,上面放了一个静态文本,然后对对话框调用 onctrlcolor()
HBRUSH CUiuiDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: Change any attributes of the DC here
pDC->SetBkMode(TRANSPARENT); // TODO: Return a different brush if the default is not desired
return (HBRUSH)GetStockObject(NULL_BRUSH);}窗体运行后是透明的(在窗体范围内可以看到桌面),但是当拖动窗体的时候,窗体不会更新,还是保留着一开始显示的那些东西,也就是一开始它所在位置的桌面的图画,请问如何可以使拖动的时候仍然可以保持透明?
还有一点不懂,在窗体的属性设置为透明和用onctrlcolor()函数设置有什么不同?

解决方案 »

  1.   

    不管是 WS_EX_TRANSPARENT 属性,还是NULL_BRUSH 都实现不了你要的效果,因为他们都不重绘背景。要真正的制作透明窗口,要用 GetLayeredWindowAttributes 设置窗口的透明度。
    你查一下该函数的用法就知道。
      

  2.   

    我以前用过的设置透明的方法
    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,2);
    FreeLibrary(hInst);
    }
    你可以看看,我也是从网上找的,放在mainfrm的oncreate里可以,但我不知道为什么放在view里就不可以了。你试试看。
      

  3.   

    在 Rebar 控件中使用对话栏请参见
    通常,如果希望对话栏带区显示为透明的,则为对话栏对象设置 WM_EX_TRANSPARENT 扩展样式。但是,由于 WM_EX_TRANSPARENT 在正确绘制对话栏背景方面存在一些问题,您将需要做一点额外的工作来实现所需的效果。
    以下过程详细描述了实现透明但不使用 WM_EX_TRANSPARENT 扩展样式所需的步骤。
    在 Rebar 带区中实现透明对话栏 
    使用“添加类”对话框,添加实现对话栏对象的新类(例如,CMyDlgBar)。 
    添加 WM_ERASEBKGND 消息的处理程序。 
    在新处理程序中,修改现有代码以匹配下例: 
    BOOL CMyDlgBar::OnEraseBkgnd( CDC* pDC )
    {
        CWnd* pParent = GetParent();
        ASSERT_VALID(pParent);
        CPoint pt(0, 0);
        MapWindowPoints(pParent, &pt, 1);
        pt = pDC->OffsetWindowOrg(pt.x, pt.y);
        LRESULT lResult = pParent->SendMessage(WM_ERASEBKGND,
            (WPARAM)pDC->m_hDC, 0L);
        pDC->SetWindowOrg(pt.x, pt.y);
        return lResult;
    }
    添加 WM_MOVE 消息的处理程序。 
    在新处理程序中,修改现有代码以匹配下例: 
    BOOL CMyDlgBar::OnMove( int cx, int cy )
    {
        Invalidate();
    }
      

  4.   

    ModifyStyle
    #define WS_CLIPSIBLINGS     0x04000000L
    #define WS_CLIPCHILDREN     0x02000000L