![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| SeregaLBN |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 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); } |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |