GetBkColor(GetDC(GetParent(hCurrent你当前窗口的句柄)));
--------------------------------------------------------------------------------

解决方案 »

  1.   

    获得系统默认色
    GetSysColor(COLOR_BTNFACE)
      

  2.   

    试过了。。但是经常WM_PAINT的话会出现闪烁问题,(注:双缓冲没用)
      

  3.   

    但是父窗口背景要是图片怎么办?是图片就是自己绘制上去的。又不是.net可以直接用控件选择的。直接用CClientDC对象输出看看。
    如果不成功就直接用CWindowDC对象,确定好自己窗体的位置CRect,去掉标题。肯定就是能输出。我截图程序就这么做的。
      

  4.   

    给你看下我的源码。。还是没有办法啊
    //m_BkImg是背景图片,CopyIMG从一个hdc中复制一张图像
    CMemDC memdc(&dc,rect);//这里的dc是CPaintDC,rect是子窗口大小,CMemDC创建一个兼容位图,在析构时
    //绘制到指定DC上
    CClientDC BkDc(GetParent());
    CRect ParRect;
    GetParent()->GetClientRect(&ParRect);
    CImage Img;
    Img.Attach(CopyIMG(BkDc.GetSafeHdc(),ParRect));
    Img.Save(L"G:\\TempNew.jpg");//从磁盘里观看后还是有子窗口的图像
      

  5.   

    嗯,第一次Copy父窗口背景的时候没有问题
    但是后面的Copy都有子窗口的图像
      

  6.   

    写错了,是GetDesktopWindow()->GetDC()
    然后定位截图。从这里面截图内容自己建立DC输出
      

  7.   

    每一次刷新窗口,或者床口被移动的时候都要PAINT,
    而且想要实现鼠标点击窗口即透明就更加不行了,HIDE以后窗口消息就没用了
      

  8.   

    就是实现透明窗口,无论窗口的背景是什么
    主要思想是吧背景图片Copy然后与自己窗口图像做透明处理,然后贴图
      

  9.   

    我有一个CMemDC类,是用CDC*还有CRect作为构造,
    创建兼容位图,然后再析构时贴图到CDC里
      

  10.   

    #ifdef TRANS
    SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
    GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE) | WS_EX_LAYERED); 
    HINSTANCE hInstTmp = LoadLibrary("User32.DLL"); 
    if(hInstTmp) 

    //取得SetLayeredWindowAttributes函数指针 
    m_fun=(MYFUNC)GetProcAddress(hInstTmp, "SetLayeredWindowAttributes"); 
    if(m_fun) m_fun(this->GetSafeHwnd(),0,90,LWA_ALPHA); //窗体句柄,颜色值,透明度30,透明方式 一般用2 
    FreeLibrary(hInstTmp); 

    #endif
      

  11.   

    CDialog也没有问题。。
    不过终于自己解决了,需要在注册窗口的时候设定与父窗口的DC分离才可以。。
      

  12.   

    CDialog也没有问题。。
    不过终于自己解决了,需要在注册窗口的时候设定与父窗口的DC分离才可以。。
    你好 我也遇到你一样的问题 请问你是怎么解决的呀