Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закрытие WebBrowser. 
:(
    Опции темы
SeregaLBN
Дата 3.11.2005, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.10.2003
Где: Киев

Репутация: нет
Всего: нет



В немодальном диалогов окне размещён WebBrowser. Это окно надо уничтожать сразу при его закрытии. Это я делаю так:
Код

void CDialogWB::OnOK() 
{
   CDialog::OnOK();
   DestroyWindow();
}

void CDialogWB::OnCancel()
{
   CDialog::OnCancel();
   DestroyWindow();
}

void CDialogWB::OnClose()
{
   CDialog::OnClose();
   DestroyWindow();
}

Это всё работает.

Но мне также надо анализировать содержимое загруженой страницы, что я начинаю делать сразу после загрузки страницы в обработчике браузера DocumentComplete.
Ели содержимое страницы меня неустроит, то я должен уничтожить диалог. Что я делаю снова же вызовом DestroyWindow():

Код

void CDialogWB::OnDocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT FAR* URL)
{
   BOOL bDestroy = TRUE;
   // ... Анализ содержимого страницы
   if (bDestroy)
      DestroyWindow();
}


Ну вот после такого кода, у меня и вылетает прога с "Unhandled exception in TestWBDestroy.exe (SHLWAPI.DLL): 0xC0000005: Access Violation.".
Поэтому поводу, собственно, и вопрос. Что я не так делаю? И, когда можно уничтожать этот диалог?
PM MAIL   Вверх
Coocky
Дата 3.11.2005, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



SeregaLBN
Господи..
Ну сам бы уже потренировался..
Попробуй в DownLoadComplete
Поставь все сообщения, которые говорят об окончании чего либо.
Раставь там точки прерывания. Пройдись в отладке и глянь ,какое сообщение последнее. Там и уничтожай окно


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
SeregaLBN
Дата 3.11.2005, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.10.2003
Где: Киев

Репутация: нет
Всего: нет



Я тренировался, перед тем как задать вопрос. Можешь несомневаться...

Вот TRACE загрузки локального файла:
Код

OnPropertyChangeExplorer1: szProperty=[{265b75c1-4158-11d0-90f6-00c04fd497ea}]
OnPropertyChangeExplorer1: szProperty=[{D0FCA420-D3F5-11CF-B211-00AA004AE837}]
OnStatusTextChangeExplorer1: Text=[Connecting to site ]
OnProgressChangeExplorer1: Progress=0, ProgressMax=10000 
OnStatusTextChangeExplorer1: Text=[Start downloading from site: file://C:\raaa.html]
OnStatusTextChangeExplorer1: Text=[Downloading from site: file://C:\raaa.html]
OnSetSecureLockIconExplorer1: SecureLockIcon=0 
OnDownloadCompleteExplorer1 
OnStatusTextChangeExplorer1: Text=[]
OnStatusTextChangeExplorer1: Text=[]
OnCommandStateChangeExplorer1: Command=2, Enable=[FALSE]
OnCommandStateChangeExplorer1: Command=1, Enable=[FALSE]
OnSetSecureLockIconExplorer1: SecureLockIcon=0 
OnCommandStateChangeExplorer1: Command=2, Enable=[FALSE]
OnCommandStateChangeExplorer1: Command=1, Enable=[FALSE]
OnStatusTextChangeExplorer1: Text=[]
OnStatusTextChangeExplorer1: Text=[Opening page file:///C:/raaa.html...]
OnStatusTextChangeExplorer1: Text=[]
OnSetSecureLockIconExplorer1: SecureLockIcon=0 
OnStatusTextChangeExplorer1: Text=[]
OnStatusTextChangeExplorer1: Text=[]
OnCommandStateChangeExplorer1: Command=2, Enable=[FALSE]
OnCommandStateChangeExplorer1: Command=1, Enable=[FALSE]
OnCommandStateChangeExplorer1: Command=-1, Enable=[FALSE]
OnNavigateComplete2Explorer1: URL=[C:\raaa.html] 
OnStatusTextChangeExplorer1: Text=[]
OnSetSecureLockIconExplorer1: SecureLockIcon=0 
OnStatusTextChangeExplorer1: Text=[Done]
OnProgressChangeExplorer1: Progress=10000, ProgressMax=10000 
OnProgressChangeExplorer1: Progress=-1, ProgressMax=10000 
OnDownloadCompleteExplorer1 
OnProgressChangeExplorer1: Progress=10000, ProgressMax=10000 
OnDocumentCompleteExplorer1: URL=[C:\raaa.html] 
OnStatusTextChangeExplorer1: Text=[Done]
OnStatusTextChangeExplorer1: Text=[Done]
OnCommandStateChangeExplorer1: Command=-1, Enable=[FALSE]
OnProgressChangeExplorer1: Progress=0, ProgressMax=0 


Как видно, последним из Complet'ов, и есть как раз DocumentComplete.

Попытка закрыть диалог при самом последнем уведомлении от браузера:
Код

void CTestWBDestroyDlg::OnProgressChangeExplorer1(long Progress, long ProgressMax) 
{
   TRACE("OnProgressChangeExplorer1: Progress=%i, ProgressMax=%i \r\n", Progress, ProgressMax);
   if (Progress==0 && ProgressMax==0) {
      DestroyWindow();
   }
}

приводят к аналогичному результату.
PM MAIL   Вверх
Earnest
Дата 3.11.2005, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Пошли диалогу сообщение WM_CLOSE, причем асинхронно (PostMessage).



--------------------
...
PM   Вверх
SeregaLBN
Дата 3.11.2005, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.10.2003
Где: Киев

Репутация: нет
Всего: нет



Спасибо, Earnest.
Так как WM_CLOSE не уничтожает немодальный диалог, то я сделать чуть по-другому:
Код

void CDialogWB::OnDocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT FAR* URL) 
{
   ::PostMessage(m_hWnd, WM_CLOSE, 0L, 0L);
}

void CDialogWB::OnClose() 
{
   CDialog::OnClose();
   DestroyWindow();
}

Так вроде всё работает - и диалого уничтожается, и нет exeption'ов.

Интересно что если сделать так - сразу вызвать ассинхронно WM_DESTROY:
Код

void CDialogWB::OnDocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT FAR* URL) 
{
   ::PostMessage(m_hWnd, WM_DESTROY, 0L, 0L);
}

то у меня диалог не уничтожался, в вот окно браузера в диалоге - уничтожалось...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.2231 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.