исчезновение дочернего окна при перерисовке родительского окна

Я создал дочернее окно (диалоговое окно) и установил его родительское окно другого процесса (например, Блокнот) по его дескриптору.

HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID );

if (NULL != hProcess )
{
HWND hw;
hw = find_main_window(processID); //some function of getting win handle through process ID
}

................

CMyHud *mhDlg = new CMyHud();
CWnd* pWnd = CWnd::FromHandle(hw);//if(mhDlg->m_hWnd != 0)
if (!mhDlg->GetSafeHwnd())
{
if (mhDlg != NULL)
{
ret = mhDlg->Create(IDD_DIALOG1, pWnd);
}

if (!ret)   //Create failed.
{
AfxMessageBox(_T("Error creating Dialog"));
return FALSE;
}
}

Затем я устанавливаю стили для родительского и дочернего окон

LONG t = GetWindowLong(hw,GWL_STYLE) | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
SetWindowLong(hw,GWL_STYLE,t);

LONG t1 = GetWindowLong(mhDlg->m_hWnd,GWL_STYLE) | WS_CLIPSIBLINGS | WS_OVERLAPPED;
SetWindowLong(mhDlg->m_hWnd,GWL_STYLE,t1);
::BringWindowToTop(mhDlg->m_hWnd);
mhDlg->ShowWindow(SW_SHOW);

Дочернее окно появляется в клиентской области родительского окна (Блокнот).

Хорошо.

НО! Это исчезает, когда я устанавливаю фокус на родительское окно. Что ж. Физически он все еще там, но его фон сливается с фоном окна родителя, и кажется, что дочернее окно пропало.

Когда вы найдете дочернее окно и установите на нем фокус, оно появится снова. Но он плохо перерисовывается, все еще с частями фона окна родителя (посмотрите на картинку).
изображение здесь

Что я сделал не так?? Что я должен сделать, чтобы дочернее окно появилось поверх родительского ВСЕГДА, независимо от перерисовки родительского окна?

2

Решение

С использованием метода SetWindowPos все работает отлично!

1

Другие решения