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

时间:2012-04-12 20:46:06

标签: c++ windows browser mfc windowless

是否有可能创建一个无窗口的mfc c ++应用程序(可以在xp上运行),它包含透明的浏览器组件(默认情况下背景为透明)和一个按钮(例如关闭该应用程序)?

4 个答案:

答案 0 :(得分:2)

您可以尝试以下代码,但在选择或调整大小时仍会出现伪影:

    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;
    }

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我认为你不能用标准的WebBrowser(嵌入式IE引擎)做到这一点,因为它对你的透明度愿望一无所知,并且总是会画一个背景。

可以使用替代的html引擎,例如HTMLayout。虽然它不是很好的互联网浏览器(没有javascript等),但对于Web风格的UI它比WebBrowser好得多(更快,使用更少的内存,支持渐变,动画,高级布局)。如果你需要的只是带有图像,控件,链接,动画和按钮的“web UI”,并且你正在使用MFC,WTL或纯WinAPI,这是一个不错的选择。

答案 3 :(得分:0)

您是否尝试捕获窗口的背景,并将其添加为浏览器组件的背景?当然,如果您想显示一个窗口,它将工作由您自己(/您的团队)创建的HTML文档,但如果不是这样,那么整个问题就毫无意义。

我从未试图通过嵌入式浏览器这样做,但我将其用于其他一些控件(如备忘录框),并且它有效。如果您选择此解决方案,您仍应注意,无论何时移动或调整窗口大小,您都必须重新捕获窗口的背景。

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

可以找到部分屏幕截图的更多信息here