使用SetLayeredWindowAttributes实现窗口透明的过程,发现一个这样的怪问题,代码如下: if(bDrawingMode)
{
//使窗口只能用画笔绘图
SetWindowLong(m_hWnd, GWL_EXSTYLE, m_dwExStyle^WS_EX_LAYERED);
}
else
{
//使窗口有鼠标穿透功能,即可以操作屏幕
SetWindowLong(m_hWnd, GWL_EXSTYLE, m_dwExStyle | WS_EX_LAYERED | WS_EX_TRANSPARENT );
} BOOL bRet = FALSE; //(int)(nTransparent*2.55)
BYTE R = CDrawObject::m_maskBgColor.GetR();
BYTE G = CDrawObject::m_maskBgColor.GetG();
BYTE B = CDrawObject::m_maskBgColor.GetB();
bRet = CUser32DLL::GetInstance()->SetLayeredWindowAttributes(m_hWnd, RGB(R, G, B), int(nTransparent*2.55), dwFlags); 当我把系统的颜色调成16位增强色的时候,透明虽然是透明的,但这时窗体还是鼠标穿透模式,如果把系统的颜色调成32真彩色的时候,则不仅是透明的,而且可以在该窗体上绘制图形。这是什么呢?
{
//使窗口只能用画笔绘图
SetWindowLong(m_hWnd, GWL_EXSTYLE, m_dwExStyle^WS_EX_LAYERED);
}
else
{
//使窗口有鼠标穿透功能,即可以操作屏幕
SetWindowLong(m_hWnd, GWL_EXSTYLE, m_dwExStyle | WS_EX_LAYERED | WS_EX_TRANSPARENT );
} BOOL bRet = FALSE; //(int)(nTransparent*2.55)
BYTE R = CDrawObject::m_maskBgColor.GetR();
BYTE G = CDrawObject::m_maskBgColor.GetG();
BYTE B = CDrawObject::m_maskBgColor.GetB();
bRet = CUser32DLL::GetInstance()->SetLayeredWindowAttributes(m_hWnd, RGB(R, G, B), int(nTransparent*2.55), dwFlags); 当我把系统的颜色调成16位增强色的时候,透明虽然是透明的,但这时窗体还是鼠标穿透模式,如果把系统的颜色调成32真彩色的时候,则不仅是透明的,而且可以在该窗体上绘制图形。这是什么呢?
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法