GetBkColor(GetDC(GetParent(hCurrent你当前窗口的句柄)));
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
GetSysColor(COLOR_BTNFACE)
如果不成功就直接用CWindowDC对象,确定好自己窗体的位置CRect,去掉标题。肯定就是能输出。我截图程序就这么做的。
//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");//从磁盘里观看后还是有子窗口的图像
但是后面的Copy都有子窗口的图像
然后定位截图。从这里面截图内容自己建立DC输出
而且想要实现鼠标点击窗口即透明就更加不行了,HIDE以后窗口消息就没用了
主要思想是吧背景图片Copy然后与自己窗口图像做透明处理,然后贴图
创建兼容位图,然后再析构时贴图到CDC里
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
不过终于自己解决了,需要在注册窗口的时候设定与父窗口的DC分离才可以。。
不过终于自己解决了,需要在注册窗口的时候设定与父窗口的DC分离才可以。。
你好 我也遇到你一样的问题 请问你是怎么解决的呀