0

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

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

4

2 回答 2

2

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

于 2009-09-03T14:06:28.570 回答
0

我在这里找到了使整个窗口透明并点击的方法:

http://www.codeproject.com/KB/wtl/transparent.aspx

但这对于我只希望窗口的透明部分(通过 HTML/CSS 定义透明)被点击的情况没有用...

更新:显然,点击应该通过透明部分(参见http://jalaj.net/2007/02/05/form-with-a-hole/),但在我的 CDHTMLDialog 中它们没有。我最好的猜测是 BHO 的子窗口会吸引我的点击,但我真的认为这没有多大意义......

于 2009-09-02T16:23:28.580 回答