Я использую Систему. Windows. Средства управления. WebBrowser для различных вещей в моем приложении и я заметил, что adorners отключены, когда они, как предполагается, появляются по WebBrowser. Я понимаю, что управление WebBrowser является действительно оберткой вокруг COM-компонента и вероятно представляет по-другому, но я задался вопросом, выяснил ли кто-либо, как решить это.
Это - проблема, которую я вижу. Здесь у меня есть просто образец adorner, который, как предполагается, рисует большой красный круг в верхнем углу чего-то (как образец).
Когда я украшаю WebBrowser этим, я получаю этот результат:
Я ожидаю видеть полный круг.
Вот код для этого бесполезного adorner, в случае, если это полезно:
public class SillyAdorner : Adorner
{
public SillyAdorner(UIElement element) : base(element)
{
}
protected override void OnRender(DrawingContext drawingContext)
{
drawingContext.DrawEllipse(new SolidColorBrush(Colors.Red), new Pen(), new Point(7, 7), 30, 30);
base.OnRender(drawingContext);
}
}
И вот то, как я применяю его к браузеру в методе OnRender управления хостом:
protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext);
var layer = AdornerLayer.GetAdornerLayer(browser);
layer.Add(new SillyAdorner(browser));
}
У кого-либо есть какие-либо взломы или обходные решения для этого?
Править: Я использую.NET 4.0, если это имеет значение.
Редактирование № 2: WebBrowser, кажется, наследовался HwndHost, который я посмотрел относительно другой вопрос или два adorners и hwndsources, но я не вижу ничего, что похоже, я мог реализовать его для WebControl, но надо надеяться это - полезная информация для кого-то.
Чтобы сделать Process.Start использовать exec непосредственно вместо использования механизма OS 'для открытия файлов, необходимо установить для UseShellExecute значение false. Это также справедливо для Linux и Windows.
Process.Start(new ProcessStartInfo (
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
"--no-first-run")
{ UseShellExecute = false });
Обратите внимание, что для правильного запуска набора приложений Chrome можно использовать «open». Используйте аргумент «-a» для принудительного запуска определенного приложения, аргумент «-n» для открытия нового экземпляра и «--args» для передачи аргументов:
Process.Start(new ProcessStartInfo (
"open",
"-a '/Applications/Google Chrome.app' -n --args --no-first-run")
{ UseShellExecute = false });
-121--1537532- В C:
#include <string.h> // memcpy
#include <stdlib.h> //realloc
В C++ удалите .h
и префикс с c
. В C++ они будут помещены в пространство имен std
, но также будут глобальными.
Я не думаю, что это будет работать с Adroner, но вы можете разместить содержимое над элементом управления WebBroswer с помощью прозрачного элемента управления Popup. Более подробную информацию и образец кода можно найти здесь .
Попробуйте использовать другое прозрачное оверлейное окно TOP LEVEL . Разумеется, поддерживается только в Windows 2000 или выше, Win9x не имеет многоуровневых окон.