12月的程序员杂志上曾说过这个问题,不过是用DELPHI,但是对于RGB颜色设置的原理是一样的,你可以去参考那一篇文章。

解决方案 »

  1.   

    WM_WINDOWPOSCHANGING
    中加入刷新的语句,UpdateWindow
      

  2.   

    首先你要清楚一点,就是这个窗口不是透明的,他只是和背景的贴图一样才会被认为是透明的。你要是想让它和背景保持一致重画就可以了。
    我还不知道控件怎么设置可以透明,在2000和xp中windows提供了使窗口透明的方法。
      

  3.   

    应该RedrawWindow,UpdateWindow在视觉上有问题
      

  4.   

    谢谢:
        要设置控件透明可以在属性中设置,我用了WM_CTLCOLOR消息来实现的。可是我这个控件是要经常移动的,在移动中该控件就不是一直透明的。我用phoenix96_2000(Jack Of All Trades)方法,好象没有效果,用redrawwindow也一样不行。
       大家多想想办法,应该能解决的呀。反正回答我的问题都给分的。
      

  5.   

    在MoveWindow()后调用下面函数即可,当然,还要用WM_CTLCOLOR返回一个空刷。
    void CMyStatic::Transparent()
    {
    RECT r,w;
    GetClientRect( &r );
    GetWindowRect( &w );
    CWnd * pParentWnd = GetParent();
    pParentWnd->ScreenToClient( &w );
    pParentWnd->InvalidateRect( &w );}
      

  6.   

    http://www.csdn.net/expert/topic/464/464120.shtm帮帮我吧(网吧管理软件)
      

  7.   

    to PhilipSun(Phil):
    谢谢你。能不能告诉我为什么要这样吗?谢谢你。
      

  8.   

    hello,你好.你的问题我看到了.我的解决办法:
    HBRUSH CWnd2Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    //HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

           hbr=m_bru;//m_bru是我定义的画刷
    if (nCtlColor==CTLCOLOR_STATIC)
    {
    pDC->SetBkMode(TRANSPARENT);//重点就在这里了. }
    // TODO: Return a different brush if the default is not desired
    return hbr;
    }
    试一下.看看我用是好用的
      

  9.   

    to victorliu168():
    首先要谢谢你。很遗憾,你的帖子出来的时候我已经把分加完了。
    然后就是你的方法我已经用过了,当这个控件是静态不动的时候就可以实现透明的,但是我的控件是要经常移动的。所以我早就试过了,好象不行!
    再次谢谢你的帮忙!
      

  10.   

    也是前一段在CSDN上讨论中学的,主要是MoveWindow()不冲刷CStatic的背静,所以用他父窗口的强制进行冲刷,父窗口会通知子窗口Static重会背景,这是由子窗口的Window Style决定的,至于CStatic在Move后为何不冲刷背景,我也没研究过。