当前位置:   CEF3 > 正文

Chrome Style C#应用程序?

c#,google-chrome,windows-vista,windows,chrome,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具

我不是在谈论远景玻璃功能,我已经知道如何实现这一目标.我正在谈论的功能是为标题栏添加控件,就像Office 2007对标识和工具栏一样.



1> Franci Penov..:

你需要做一些Win32互操作才能达到这个效果.根据您使用的是Winforms还是WPF,您挂钩到消息处理的方式不同(我不记得Winforms,所以我将为WPF提供所有示例).但在这两种情况下,您需要:

    拦截窗口的创建并修改窗口样式和扩展样式.在WPF中,您需要继承HwndSource并修改它HwndSourceParameters才能实现此目的.对于常规样式和WS_EX_WINDOWEDGE以及WS_EX_APPWINDOW扩展样式,您需要WS_OVERLAPPEDWINDOW,WS_CLIPSIBLINGS和WS_VISIBLE.

    通过HwndSource参数HwndSourceHook添加消息处理程序.

    在通过第二步中的钩子添加的消息proc中,您需要处理几条消息:

    WM_NCACTIVATE - 在激活或不激活应用程序时更改标题的绘制

    WM_NCCALCSIZE - 返回到您没有非客户区域的操作系统

    WM_NCPAINT - 一般来说,你只需要在这里设置窗口矩形,WPF将负责实际的绘画)

    WM_NCHITTEST - 处理窗口的移动,最小化和最大化.

    完成上述操作后,WPF将绘制可视树的客户区将跨越窗口的整个区域.您需要添加"非cliet"视觉效果,以便您的应用程序看起来像是用户的常规应用程序.

    您可能还需要几条消息:

    WM_THEMECHANGED 如果你想改变你的"非客户"区域绘画,以与操作系统主题保持一致

    WM_DWMCOMPOSITIONCHANGED 如果你想延长玻璃并在启用玻璃时获得标准的OS NC玻璃画,并在没有玻璃时切换到自定义逻辑.

    如果你想获得边界,标题,关闭,最小化和最大化按钮以在"非客户"区域中使用的标准Win32资源,你可能想要查看Win32主题API.

    如果您想将Glass扩展到窗口中,可以查看:

    DwmExtendFrameIntoClientArea - 获得标准玻璃NC区域

    DwmDefWindowProc - 让桌面管理器绘制Glass和标准NC控件

    DwmIsCompositionEnabled - 确定Glass是否已启用; 只有在启用Glass时才能使用上述两个API.如果未启用Glass,则需要自己绘制NC区域.

您可以在P/Invoke上找到所需的所有消息,样式和相应的Win32 API的正确C#定义.

您也可以通过使用标准WPF窗口来实现类似的效果WindowStyle=none.但是,桌面对您的应用和其他应用的行为会有一些差异; 最明显的是,您无法通过右键单击任务栏来堆叠或平铺窗口.

您还可以查看一些启用此功能的第三方组件.我没有使用任何(你可以看到,我不害怕Win32互操作:-)),所以我不能推荐你任何特别的.



2> Erik Funkenb..:

正如Franci所提到的,你想要的是DwmExtendFrameIntoClientArea.这是Codeproject的一个示例,展示了如何执行此操作.

http://www.codeproject.com/KB/dialog/AeroNonClientAreaButtons.aspx



3> Shuft..:

WPF产品团队开发人员Joe Castro拥有一个名为"WPF Chrome"的MSDN代码库项目,可用于创建类似于Office 2007的UI(即:跨越窗口的客户端和非客户端区域的控件) ).

在这里找到它:http://code.msdn.microsoft.com/chrome

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/CEF3/detail/23292
推荐阅读
相关标签
  

闽ICP备14008679号