是否有可能创build一个由透明浏览器组件组成的无窗口mfc c ++应用程序?

是否有可能创build一个无窗口mfc c + +应用程序(这将在XP上运行),将由透明的浏览器组件(背景默认透明)和一个button(例如closures该应用程序的沃尔德)组成?

您可以尝试下面的代码,但在选择或调整大小时仍然会出现人为现象:

private void WebCtrl_Loaded(object sender, RoutedEventArgs e) { var hRef = new HandleRef(null, WebCtrl.Handle); int style = GetWindowLong(hRef, GWL_EXSTYLE); if ((style & WS_EX_TRANSPARENT) == 0) SetWindowLong(hRef, GWL_EXSTYLE, style | WS_EX_TRANSPARENT); style = GetWindowLong(hRef, GWL_STYLE); if ((style & WS_CLIPCHILDREN) == 0) SetWindowLong(hRef, GWL_STYLE, style | WS_CLIPCHILDREN); } IntPtr WebCtrl_MessageHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { if (msg == WM_ERASEBKGND) handled = true; return IntPtr.Zero; } 

不。在MFC应用程序中托管WebBrowser组件并在Non-Client区域绘制一个关闭按钮没有问题,但WebBrowser组件本身将呈现一个背景。

我不认为你可以使用标准的WebBrowser(嵌入式IE引擎)来做到这一点,因为它不知道你的透明度的愿望,总是会画出背景。

这是可能的替代HTML引擎,例如HTMLayout 。 虽然它不是很好的互联网浏览器(没有JavaScript等),但对Web风格的用户界面,它比WebBrowser(更快,使用更少的内存,支持梯度,动画,高级布局)要好得多。 如果你需要的只是带有图片,控件,链接,动画和按钮的“网络用户界面”,而且你正在使用MFC,WTL或纯WinAPI,这是一个不错的选择。

您是否尝试捕获窗口的背景,并将其添加为浏览器组件的背景? 当然, 只有当你想显示你自己创建的HTML文档时,它才会起作用,但是如果不是这样的话,那么整个问题就没有意义了。

我从来没有试过这样做嵌入式浏览器 ,但我做了一些其他控制(如备忘录),它的工作。 如果你选择这个解决方案,你应该仍然意识到,当你移动或调整大小时,你必须重新捕捉窗口的背景。

您可以使用您选择的解决方案在嵌入式浏览器中显示背景,但是最好的选择是使用CSS定义的背景,这将被您的替换。 (不要忘了伪造一个简单的javascript来刷新窗体大小/移动的背景,以避免无意中重新加载整个文档。)

部分截屏的更多信息可以在这里找到。