Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Visual C++ / MFC / WTL > Не приходит WM_SETFOCUS при переключения окна. |
Автор: a_n_y_a 23.04.18, 07:53 |
Простое диалоговое окно. В нем создается процесс для другой программы. находится ее окно и через найденный хендл происходит управление этим окном. Проект в VC++ 2012 года прилагаю. Создаю окно так: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> CString strCommandLine = _T("SetWinText.exe"); STARTUPINFO si = {0}; PROCESS_INFORMATION pi; si.cb = sizeof (si); si.wShowWindow = SW_SHOW; si.dwFlags = STARTF_USESHOWWINDOW; if (::CreateProcess(NULL, (LPWSTR)(LPCTSTR)strCommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { Sleep(1000); sw=NULL; if((sw=::FindWindow(NULL, _T("SetWinText")))==NULL) AfxMessageBox(_T("Окно SetWinText не найдено")); else ::MoveWindow(sw, 0,0,500,500,true); } else { AfxMessageBox (_T("Не могу найти программу SetWinText.")); }; Программа SetWinText.exe находится в папке проекта. Когда я после запуска проекта на выполнение и запуска программы SetWinText.exe проектом переключаюсь на другое окно, закрывающее оба этих окна, снова перехожу к главному окну проекта, появляется только главное окно, окно программы SetWinText.exe не появляется! Проверял, не приходит сообщение WM_SETFOCUS. Это сообщение приходит только после того, когда я жму кнопку ОК в окне главной программы. Тогда перед закрытием окна на мгновение появляется управляемое окно. Управляю окном так: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> void CProvSetFocusDlg::OnSetFocus(CWnd* pOldWnd) { CDialogEx::OnSetFocus(pOldWnd); // TODO: Add your message handler code here ::SetForegroundWindow(sw); } Что я делаю не правильно? ProvSetFocus.rar (, : 88) |