c++ - Windows 区域和透明度

标签 c++ internet-explorer mfc internet-explorer-7 bho

我在 BHO 中有一个 CDHTMLDialog,我希望它是部分透明的,因为透明区域会根据对话框的逻辑发生变化。我让它在视觉上变得透明(使用 SetLayeredWindowAttributes),但是让这个区域真正透明是至关重要的,因为否则当我点击透明区域时,我的点击不会到达对话框透明部分下方的 IE 窗口。我通过根据对话框事件部分的大小不断调整对话框的大小来临时解决这个问题,但我永远跟不上这个......

我认为该解决方案与 Windows 所谓的“区域”( http://msdn.microsoft.com/en-us/library/dd162915%28VS.85%29.aspx ) 有关,但我不确定如何使用它们。谁能指出我正确的方向?

最佳答案

我不认为你想让你的窗口的一部分透明,你想要做的是(我认为)设置窗口区域(就像你提到的那样)。阅读有关 SetWindowRgn() 的 MSDN - 基本上您定义了一个 HRGN 类型的 GDI 对象(如果您使用的是 MFC,则为 CRgn),它描述了特定形状的表面,并最终切掉了部分。然后,Windows 仅将您在窗口上设置的“区域”视为要使用的窗口的一部分。基本上,这就是制作非矩形 window 的方式。 “区域”不是窗口的“透明”部分,它是一种在某种程度上丢弃窗口区域的方法。

关于c++ - Windows 区域和透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1367953/

相关文章:

c++ - Boost.Bind - 理解占位符

c++ - 如何从 VS2008 调用 C++ dll

javascript - 基于ie浏览器版本的网站重定向

c++ - 在 MFC 程序中创建 Hook 窗口

mfc - 某些控件似乎没有随机绘制

c++ - 如何获取命令 ID 的键盘加速器?

c++ - 使用参数数量可变的宏编写函数

c++ - 指针引用可能检测到内存泄漏?

css - IE 不将 SVG 显示为伪元素 :before or :after 中的内容

html - 我的可扩展内容无法在 IE 上运行