Модераторы: Daevaorn
  

Поиск:

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


Бывалый
*


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

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



Есть SDI приложение, в котором на CFormView вставлена ActiveX компонента IE browser. И есть HTML-странички которые просматриваются с его помощью. На форму этой странички пользователь проги вводит некие данные, которые я проверяю c помощью JavaScript на правильность. Если были введены неверные данные я уведомляю об этом пользователя с помощью JavaScript'ового модального MessageBox'а (функция alert(..) на JavaScript).
А теперь собственно о проблеме - если пользователь неудосужился закрыть этот диалог, мне необходимо самому из проги на MFC это выполнить. Но я немогу этого сделать так как ненахожу данного окна...

Поиск окна я выполняю след. образом:
В классе CMainFrame есть локальный хук, который перехватывает процедуру обработки сообщений у этого же класса CMainFrame.
В этом хуке я "вешаюсь" на сообщение WM_ENABLE и обрабатываю его когда enabled/disabled flag равен FALSE (т.е. когда появилось, в моём случае, некое модальное окно). А сама обработка заключается в поиске модального окна.
Модальное окно, которое мне надо найти, имеет след. заголовок "Microsoft Internet Explorer", а левая тулза показывает что именем класса окна является "#32770".
Кроме этого, я пытаюсь найти окно с помощью EnumChildWindows, которой передаю в качестве CALLBACK ф-ции адрес своей ф-ции EnumChildProc.
В EnumChildProc я выполняю вывод заголовка окна.

Так вот hWnd_alert всегда == NULL. А EnumChildProc выводит несколько пустых заголовков и ?! один заголовок "Ready", т.е. ничего похожего на правду.

Подскажите где грабли. Насколько я понимаю у меня логика проги хромает...

PS: Logger.Put(...) - мой аналог MFC'шного TRACE'a.

BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
{
TCHAR szCaption[64] = {0};
::GetWindowText(hwnd, szCaption, 64);
Logger.Put("WindowText = %s\n", szCaption);
return TRUE;
}

WNDPROC defWndProc_CMainFrame;
LRESULT CALLBACK newWndProc_CMainFrame(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch (msg) {
case WM_ENABLE:
Logger.Put("fEnabled = %i\n", (BOOL)wParam);
if (!(BOOL)wParam) {
HWND hWnd_alert = FindWindow(NULL, "Microsoft Internet Explorer");
//HWND hWnd_alert = FindWindow("#32770", NULL);
Logger.Put("hWnd_alert = %x\n", hWnd_alert);
if (hWnd_alert) {
TCHAR szCaption[64] = {0};
::GetWindowText(hWnd_alert, szCaption, 64);
Logger.Put("WindowText (hWnd_alert) = %s\n", szCaption);
}
EnumChildWindows(hwnd, EnumChildProc, 0);
}
break;
}
return CallWindowProc((WNDPROC)defWndProc_CMainFrame, hwnd, msg, wParam, lParam);
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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