c# - webbrowser - google chrome webkitbrowser
Aplicaciones Chrome Style C#? (4)
Como dice Franci, lo que quieres es DwmExtendFrameIntoClientArea. Aquí hay un ejemplo de Codeproject que muestra cómo hacerlo.
http://www.codeproject.com/KB/dialog/AeroNonClientAreaButtons.aspx
No estoy hablando de la función de vidrio de vista, ya sé cómo lograr eso. La característica de la que estoy hablando es agregar controles a la barra de título, como hace Office 2007 con el logotipo y la barra de herramientas.
He utilizado el conjunto de control DotNetBar con mucho éxito.
Necesitas hacer algo de interoperabilidad Win32 para lograr ese efecto. Dependiendo de si está utilizando Winforms o WPF, la forma en que se conecta al procesamiento del mensaje difiere (no recuerdo las formas de Winforms, así que daré todos los ejemplos para WPF). Pero en ambos casos, debes:
Intercepta la creación de la ventana y modifica los estilos de ventana y estilos extendidos. En WPF necesita heredar de
HwndSource
y modificarHwndSourceParameters
para lograr esto. Necesita WS_OVERLAPPEDWINDOW, WS_CLIPSIBLINGS y WS_VISIBLE para el estilo normal y estilos extendidos WS_EX_WINDOWEDGE y WS_EX_APPWINDOW.Agregue un controlador de mensajes a través de los parámetros de HwndSource HwndSourceHook.
En el proceso de mensaje agregado a través del enlace en el paso dos, necesita procesar varios mensajes:
-
WM_NCACTIVATE
- para cambiar la pintura del título cuando la aplicación está activada o no -
WM_NCCALCSIZE
- para volver al sistema operativo que no tiene áreas no cliente -
WM_NCPAINT
: en general, debe invalidar la ventana rect solo aquí; WPF se ocupará de la pintura real) -
WM_NCHITTEST
- para procesar el movimiento de la ventana, minimizando y maximizando.
-
Una vez que haga lo anterior, su área de cliente donde WPF pintará su árbol visual abarcará toda el área de la ventana. Tendrá que agregar las imágenes "no cliet" para que su aplicación se vea como una aplicación normal para el usuario.
Es posible que necesite varios mensajes más:
-
WM_THEMECHANGED
si desea cambiar la pintura del área "no cliente" para que sea coherente con el tema del sistema operativo -
WM_DWMCOMPOSITIONCHANGED
si desea extender el vidrio y obtener la pintura de vidrio NC estándar del sistema operativo cuando el vidrio está habilitado y cambiar a su lógica personalizada cuando el vidrio no lo está.
-
Es posible que desee consultar las API de Win32 Theme si desea obtener los activos estándar de Win32 para bordes, leyendas, cerrar, mininmizar y maximizar botones para usar en su área ''no cliente''.
Si desea extender Glass en su ventana, puede ver:
-
DwmExtendFrameIntoClientArea
: para obtener el área NC de vidrio estándar -
DwmDefWindowProc
: para que el administrador de escritorio pinte Glass y los controles NC estándar -
DwmIsCompositionEnabled
- para determinar si Glass está habilitado; puede usar las dos API anteriores solo cuando Glass esté habilitado. Si Glass no está habilitado, debe hacer su propio dibujo del área NC.
-
Puede encontrar las definiciones correctas de C # de todos los mensajes, estilos y API correspondientes de Win32 que necesita en P / Invoke .
También podría lograr un efecto similar al usar la ventana estándar de WPF con WindowStyle=none
. Sin embargo, habrá algunas diferencias entre el comportamiento del escritorio hacia su aplicación y otras aplicaciones; Lo más obvio de ellos es que no podrás apilar ni colocar mosaicos en tu ventana haciendo clic con el botón derecho en la barra de tareas.
También puede ver algunos componentes de terceros que habilitan algunas de estas funciones. No he usado ninguno (como puede ver, no le tengo miedo a la interoperabilidad de Win32 :-)), así que no puedo recomendarlo en particular.
Joe Castro, desarrollador de equipos de productos de WPF, tiene un proyecto de galería de códigos MSDN llamado "WPF Chrome" que se puede usar para crear una interfaz de usuario tipo Office 2007 (es decir, controles que abarcan tanto el cliente como las áreas no cliente de una ventana) )
Encuéntrelo aquí: http://code.msdn.microsoft.com/chrome