En primer lugar tenga en cuenta que IE 6 pinta la frontera solo si se especifica
< html DOCTYPE > o
body {border-style: inserción; ancho del borde: 2px; margen: 0px; }
Pero esto ya no funciona con las nuevas versiones de IE.
Por lo tanto, si la pintura de la frontera en C# y especifica un DOCTYPE debe establecer
html, body {border: 0; }
de lo contrario tienen dos fronteras en IE 6.
La solución de Hans (para ajustar WS_BORDER) produce un borde negro feo.
Si desea dejar un borde 3D hundido la solución más sencilla es la siguiente:
protected override CreateParams CreateParams
{
get
{
CreateParams i_Parms = base.CreateParams;
i_Parms.ExStyle |= 0x200; // WS_EX_CLIENTEDGE
return i_Parms;
}
}
El problema es que la frontera 3D hundido fue utilizado hasta Windows 2000. Sin embargo, las cosas cambiaron con XP donde el UxTheme. La DLL pinta todos los controles en lugar del antiguo USER32.DLL. Todas las banderas de pintura de control en User.h se usaron hasta Windows 2000 y ya no producen pintura compatible con Theme desde XP.
Entonces, ¿cómo conseguir un borde que se parece a la frontera 7 Theme XP/Windows del cuadro de lista, ListView, TreeView, etc, (una delgada línea azul o verde) y cambia el color cuando se cambia el tema?
Una solución fácil es insertar un cuadro de lista en el diseñador de la forma en VS en el lugar donde desea que el navegador que aparezca y luego escribir en su Forma:
protected override void OnLoad(EventArgs e)
{
....
listBox.IntegralHeight = false;
webBrowser.Parent = listBox;
webBrowser.Dock = DockStyle.Fill;
}
Esto hace que el navegador sea un niño de el listbox. El cuadro de lista pinta su borde y el navegador interior pinta el contenido Html.
Esto funciona perfecto y se ve de la misma manera que los otros controles temáticos, pero una pequeña desventaja es que cambiar el tamaño de la forma parpadea más porque hay un control más para pintar ahora.
La solución perfecta sería pinvoke DrawThemeBackground o DrawThemeEdge para pintar el borde manualmente o para obtener el color del borde por GetThemeColor y pintar el borde con System.Drawing.Graphics.DrawRectangle() Pero esto es bastante torpe, así que no lo hice lo intento. (Además, debería implementar una alternativa si el usuario ha desactivado los temas)
Esa es una forma, por supuesto :) ¿Pero por qué todos los controles tienen un estilo de borde excepto el navegador web? – Pygmy
El navegador web es especial :-) – Kugel
Esta es la forma de realizar cualquier control que no tenga propiedad de estilo de borde. Lo he usado en RichTextBoxes y ComboBoxes incluso. – Isuru