当 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 方法一切正常!
我创建了 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 方法一切正常!