当 child window 消失时 parent window 重绘

the disappearance of the child window when when the parent window redrawn

我创建了 child window (对话框)结束设置它是 parent 另一个进程(例如记事本)的 window 通过它的句柄。

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;
    } 
}

然后我为 parent 和 child windows

设置样式
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);

childwindow出现在parentwindow(记事本)的客户区。

很好。

但是!当我将焦点设置在 parent window 上时它就消失了。出色地。物理上它仍然存在,但它的背景与 parent 的 window 背景融合在一起,child window 似乎消失了。

当您找到 child window 并将焦点放在它上面时,它会再次出现。但是重绘不好,还有一部分parent的window背景(看图)。

我做错了什么??无论重绘 parent window,总是在 parent 上出现 child window,我应该怎么做?

使用 SetWindowPos 方法一切正常!