예제 #1
0
BOOL CXTPPopupControl::ShowModal(CWnd* pParent)
{
	CWinApp* pApp = AfxGetApp();
	if (pApp != NULL)
		pApp->EnableModeless(FALSE);

	HWND hWndTop = 0;
#if (_MSC_VER <= 1100)
	CWnd* pParentWnd = CWnd::GetSafeOwner(pParent, &hWndTop);
	HWND hWndParent = pParentWnd->GetSafeHwnd();
#else
	HWND hWndParent = CWnd::GetSafeOwner_(pParent->GetSafeHwnd(), &hWndTop);
#endif


	BOOL bEnableParent = FALSE;
	if (hWndParent != NULL && ::IsWindowEnabled(hWndParent))
	{
		::EnableWindow(hWndParent, FALSE);
		bEnableParent = TRUE;
	}


	//create popup wnd
	if (Show(pParent))
	{
		SetFocus();

		RunModalLoop(MLF_NOIDLEMSG | MLF_NOKICKIDLE);
	}

	if (bEnableParent)
		::EnableWindow(hWndParent, TRUE);
	if (hWndParent != NULL && ::GetActiveWindow() == m_hWnd)
		::SetActiveWindow(hWndParent);

	DestroyWindow();

	// re-enable windows
	if (::IsWindow(hWndTop))
		::EnableWindow(hWndTop, TRUE);
	hWndTop = NULL;
	if (pApp != NULL)
		pApp->EnableModeless(TRUE);


	return TRUE;
}
예제 #2
0
파일: dlgcore.cpp 프로젝트: anyue100/winscp
void CDialog::PostModal()
{
	AfxUnhookWindowCreate();   // just in case
	Detach();               // just in case

	// re-enable windows
	if (::IsWindow(m_hWndTop))
		::EnableWindow(m_hWndTop, TRUE);
	m_hWndTop = NULL;
	CWinApp* pApp = AfxGetApp();
	if (pApp != NULL)
		pApp->EnableModeless(TRUE);
}
예제 #3
0
파일: dlgcore.cpp 프로젝트: anyue100/winscp
HWND CDialog::PreModal()
{
	// cannot call DoModal on a dialog already constructed as modeless
	ASSERT(m_hWnd == NULL);

	// allow OLE servers to disable themselves
	CWinApp* pApp = AfxGetApp();
	if (pApp != NULL)
		pApp->EnableModeless(FALSE);

	// find parent HWND
	HWND hWnd = CWnd::GetSafeOwner_(m_pParentWnd->GetSafeHwnd(), &m_hWndTop);

	// hook for creation of dialog
	AfxHookWindowCreate(this);

	// return window to use as parent for dialog
	return hWnd;
}