gusucode.com > 仿360最新界面的源码程序 > 仿360最新界面的源码程序/仿360新版特性窗口源码/部分源码/子页面示例代码/QChildPage/ExtensionWnd.cpp

    /************************************************************************
模快名:		仿360安全卫士界面
功能:		尚未对模块功能进行描述
完成日期:	2010-10-20
作者:		杨伟峰 Yang Weifeng(Email: 11259500@qq.com)

本代码可以自由使用,但因使用本代码造成的后果,本人不承担任何责任
************************************************************************/

#include "stdafx.h"
#include "ExtensionWnd.h"

CExtensionWnd::CExtensionWnd( LPCTSTR szName, LPCTSTR szIcon, LPCTSTR szCommandLine )
{
#ifdef _EXPORTING
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
#endif
	USES_CONVERSION;
	m_sName = T2W(LPTSTR(szName));
	m_sIcon = T2W(LPTSTR(szIcon));
	m_sCommandLine = szCommandLine;
	m_pPage = NULL;
	m_nIDTemplate = 0;
}

CExtensionWnd::CExtensionWnd(LPCTSTR szName, LPCTSTR szIcon, CWnd* pPage)
{
#ifdef _EXPORTING
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
#endif

	USES_CONVERSION;

	m_pPage = pPage;
	m_sName = T2W(LPTSTR(szName));
	m_sIcon = T2W(LPTSTR(szIcon));
	m_nIDTemplate = 0;
}

CExtensionWnd::CExtensionWnd(LPCTSTR szName, LPCTSTR szIcon, CDialog* pDialog, UINT nIDTemplate)
{
#ifdef _EXPORTING
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
#endif

	USES_CONVERSION;

	m_pPage = pDialog;
	m_sName = T2W(LPTSTR(szName));
	m_sIcon = T2W(LPTSTR(szIcon));
	m_nIDTemplate = nIDTemplate;
}

CExtensionWnd::~CExtensionWnd()
{
#ifdef _EXPORTING
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
#endif

	if(m_pPage!= NULL)
	{
		m_pPage->DestroyWindow();
		delete m_pPage;
		m_pPage = NULL;
	}
}

BOOL CExtensionWnd::Create(HWND hParent,LPSIZE lpSize)
{ 
#ifdef _EXPORTING
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
#endif

	CRect rtClient(0,0, lpSize->cx, lpSize->cy);
	if(m_nIDTemplate != 0)
	{
		((CDialog*)m_pPage)->Create(m_nIDTemplate, CWnd::FromHandle(hParent));
		m_pPage->ShowWindow(SW_HIDE);
		m_pPage->MoveWindow(&rtClient, FALSE);
	}
	else
	{
		static int i = 5001;
		m_pPage->Create(NULL, NULL, WS_CHILD|WS_VISIBLE, rtClient, CWnd::FromHandle(hParent), i++);
		m_pPage->ShowWindow(SW_HIDE);
	}
	m_pPage->UpdateWindow();
	return TRUE;
}

void CExtensionWnd::ReleaseWindow()
{
#ifdef _EXPORTING
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
#endif
	if(m_pPage!= NULL)
	{
		m_pPage->DestroyWindow();
	}
}

HWND CExtensionWnd::GetSafeHwnd()
{
#ifdef _EXPORTING
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
#endif
	return m_pPage->GetSafeHwnd();
}

BOOL CExtensionWnd::PreActive(BOOL bActive)
{
#ifdef _EXPORTING
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
#endif
	if(m_pPage != NULL)
	{
		return TRUE;
	}
	else
	{
		USES_CONVERSION;
		WinExec(T2A(m_sCommandLine.GetBuffer()), SW_SHOW);
		return FALSE;
	}
}

BOOL CExtensionWnd::ShowWindow(BOOL bShow)
{
#ifdef _EXPORTING
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
#endif
	if(IsWindow(m_pPage->GetSafeHwnd()))
		m_pPage->ShowWindow(bShow?SW_SHOW:SW_HIDE);
	if(bShow)
	{
		m_pPage->SetFocus();
	}
	return TRUE;
}

void CExtensionWnd::Release()
{
#ifdef _EXPORTING
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
#endif
	if(m_pPage!= NULL)
	{
		m_pPage->DestroyWindow();
		delete m_pPage;
		m_pPage = NULL;
	}
	delete this;
}

void CExtensionWnd::Resize(LPSIZE lpSize)
{
#ifdef _EXPORTING
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
#endif
	CRect rtClient(0,0, lpSize->cx, lpSize->cy);
	if(IsWindow(m_pPage->GetSafeHwnd()))
	{
		m_pPage->MoveWindow(&rtClient, FALSE);
	}
}

void CExtensionWnd::OnActive(BOOL bActive)
{
#ifdef _EXPORTING
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
#endif
	if(IsWindow(m_pPage->GetSafeHwnd()))
		m_pPage->SendMessage(WMU_WND_ACTIVE, (WPARAM)bActive, NULL);
}

BOOL CExtensionWnd::QueryClose(PBOOL bContinue)
{
#ifdef _EXPORTING
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
#endif
	if(!IsWindow(m_pPage->GetSafeHwnd()))
		return TRUE;

	BOOL bCanClose = TRUE;
	m_pPage->SendMessage(WMU_WND_QUERY_CLOSE, (LPARAM)&bCanClose, (WPARAM)bContinue);
	return bCanClose;
}

LPCWSTR CExtensionWnd::GetWindowName()
{
#ifdef _EXPORTING
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
#endif
	return m_sName.GetBuffer();
}

LPCWSTR CExtensionWnd::GetWindowIcon()
{
#ifdef _EXPORTING
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
#endif
	return m_sIcon.GetBuffer();
}