我有一个程序不是由我写的。我没有它的来源,该程序的开发者正在独立开发。他给了我该程序的HWND
和HINSTANCE
句柄。 我使用win32
api在他的窗口上创建了一个子窗口。 我需要做的第一件事就是让这个子窗口在某些区域具有透明度,而在其他区域则具有不透明度(例如游戏的头部显示(HUD)),以便用户可以在两个窗口中看到事物。在非透明父窗口(win 32)上创建一个透明子窗口
第二件事,我需要的是将所有的输入指向父窗口。我的孩子窗口不需要输入。
我知道WS_EX_TRANSPARENT
只会让孩子画在画家算法的末尾。 我不能使用WS_EX_LAYERED
,因为它是一个子窗口。
在此先感谢:)
p.s. 我看到处处都是,但没有找到任何解决方案,虽然有类似的问题在互联网上。 实际上这是一款适用于该游戏的HUD。我不能直接在父窗口上绘制,因为多线程的复杂性还有很多其他的原因。
- 编辑--------------------------- 嘿家伙, 我仍在努力。尝试不同的方式与你所有的建议。 是否有将directX
和SetWindowRgn()
函数或directx
与BitBlt()
函数结合的方法。我认为这会做到这一点。 当前我正在测试所有的东西作为子窗口和分层窗口。
它很丑,但你可以在窗口上创建一个顶层框架并跟踪窗口下方的移动。然后设置透明区域: http://www.codeguru.com/cpp/wd/dislog/non-rectangulardialogs/article.php/c5037/Creating-Shaped-Windows-Using-Regions-with-Win32.htm – Pete
如果你使窗口透明,只允许你看到父窗口。你想在父窗口打个洞吗? – Ben
那么,你至少需要WS_EX_TRANSPARENT。你需要处理的一个问题是,作者将在WM_ERASEBKGND消息上擦除他的窗口,这将消除你从样式标志中获得的背景像素。因此,您需要对其窗口过程进行子类化并取消或替换该消息。使用WM_PAINT绘制的内容是否仍然运行良好是您需要自行找出的一个悬而未决的问题。如果包含任何具有消除锯齿边缘的文字或图形,则赔率很低。作为评论发布,因为成功的可能性很小。 –