Отобразить управление веб-браузером вне экрана (или скрытое) - PullRequest
2 голосов
/ 21 февраля 2010

У меня есть небольшое приложение, которое встраивает элементы управления веб-браузера. В этом приложении я создал класс всплывающих окон. Это всплывающее окно используется для отображения сообщений об ошибках, генерируемых сервером.

Я хочу изменить размер всплывающего окна в соответствии с сообщением. Это значит, что короткое сообщение не содержится в форме большего размера, а большое сообщение не в форме небольшого размера.

Вместо того, чтобы отправлять ширину и высоту, я хотел бы рассчитать размеры на лету. Я также не хотел заметно изменять размеры формы, это просто ужасно.

Все, что я пробую, терпит неудачу: (

Это то, что я думал, должно работать

create the form
move it offscreen by setting its left position to -1000
show the form (offscreen)
write the contents to the webrowser ctl
get the width and height after it renders
hide the form
resize the form to fit the above width and height
center it onscreen
show the form

Это должно работать просто отлично, за исключением того, что элемент управления webbrowser отказывается отрисовывать, поэтому я не могу получить ширину и высоту клиента

Кто-нибудь знает, как это можно сделать?

DC

1 Ответ

1 голос
/ 06 марта 2010

Я решил проблему, с которой столкнулся. это было время.

проблема была в том, что я записывал контент в элемент управления веб-браузера. А затем пытается прочитать ширину и высоту. но элемент управления не отображался, и поэтому я не получал эти параметры.

Я понял это в начале, поэтому вместо этого поместил код изменения размера в событие ondocumentcomplete. к сожалению, я не понял, что это событие не вызывается, когда вы пишете прямо в документ. каким-то образом мне удалось убедить себя, что это не было вызвано, потому что контроль был скрыт. это был не тот случай.

Поэтому, как только мне удалось это выяснить, я включил насос сообщений после того, как вызвал функцию записи, и до того, как вызвал функцию show. насос сообщений зацикливался до тех пор, пока управление не вернулось полностью (проверяет флаг готовности)

PopUp->Write(text.c_str());
while (!PopUp->Complete() && ProcessMessages()){ ; }
popup_ctlDownloadComplete(0);

теперь, когда событие DownloadComplete вызывается вручную, документ отображается, и я могу получить ширину и высоту.

Приведенный выше код может вызвать бесконечный цикл в случае ошибки, поэтому я добавил счетчик, чтобы убить его, если это произойдет. просто не показано для краткости и ясности.

Да, и код является устаревшим кодом, а не управляемым кодом

DC

...