⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 childfrm.cpp.svn-base

📁 股票软件源码
💻 SVN-BASE
字号:
// ChildFrm.cpp : implementation of the CChildFrame class
//

#include "stdafx.h"
#include "StkUI.h"

#include "ChildFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CChildFrame

#define	IDC_CHILDFRAME_TABCTRL	1000

IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd)

BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
	//{{AFX_MSG_MAP(CChildFrame)
	ON_WM_CREATE()
	ON_WM_WINDOWPOSCHANGED()
	ON_NOTIFY(TCN_SELCHANGE, IDC_CHILDFRAME_TABCTRL, OnTabSelChange)
	ON_WM_CLOSE()
	ON_WM_MDIACTIVATE()
	ON_WM_SIZE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

CChildFrame* CChildFrame::CreateNewFrame( CStaticDoc* pStaticDoc )
{
	if (pStaticDoc != NULL)
		ASSERT_VALID(pStaticDoc);
	// create a frame wired to the specified document

	ASSERT( pStaticDoc->GetIDResource() != 0); // must have a resource ID to load from
	CCreateContext context;
	context.m_pCurrentFrame = NULL;
	context.m_pCurrentDoc = NULL;		//pStaticDoc;
	context.m_pLastView = NULL;
	context.m_pNewViewClass = NULL; // pViewClass if this is set, a view will be created!
	context.m_pNewDocTemplate = NULL;

	CRuntimeClass* pFrameClass = RUNTIME_CLASS(CChildFrame);

	CChildFrame * pFrame = (CChildFrame*)pFrameClass->CreateObject();
	if (pFrame == NULL)
	{
		TRACE1("Warning: Dynamic create of frame %hs failed.\n",
			pFrameClass->m_lpszClassName);
		return NULL;
	}
	ASSERT_KINDOF(CChildFrame, pFrame);

	// create new from resource
	if (!pFrame->LoadFrame( pStaticDoc->GetIDResource(),
			WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE,   // default frame styles
			AfxGetMainFrame(), &context))
	{
		TRACE0("Warning: Couldn't create a child frame.\n");
		// frame will be deleted in PostNcDestroy cleanup
		return NULL;
	}

	// it worked !
	return pFrame;
}

/////////////////////////////////////////////////////////////////////////////
// CChildFrame construction/destruction

CChildFrame::CChildFrame()
{
	// TODO: add member initialization code here
}

CChildFrame::~CChildFrame()
{
}

BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CMDIChildWnd::PreCreateWindow(cs);
}

BOOL CChildFrame::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	CMainFrame * pMainFrame = AfxGetMainFrame( );
	if( WM_SYSKEYDOWN == pMsg->message
		|| WM_SYSKEYUP == pMsg->message 
		|| WM_SYSCHAR == pMsg->message )
	{
		if( pMainFrame && VK_F4 == pMsg->wParam )
		{
			pMainFrame->PostMessage( WM_CLOSE );
			return TRUE;
		}
	}
	else if( WM_RBUTTONUP == pMsg->message
		|| WM_RBUTTONDOWN == pMsg->message
		|| WM_NCRBUTTONUP == pMsg->message
		|| WM_NCRBUTTONDOWN == pMsg->message )
	{
		CWnd* pWnd = CWnd::FromHandlePermanent(pMsg->hwnd);
		CView * pView = DYNAMIC_DOWNCAST( CView, pWnd );
		if( NULL == pView )
			pView = GetActiveView();
		
		UINT	nMenuID	=	0;
		if( pView && pView->IsKindOf(RUNTIME_CLASS(CWizardView)) )
			nMenuID	=	IDR_POPUP_WIZARDVIEW;
		else if( pView && pView->IsKindOf(RUNTIME_CLASS(CSimuView)) )
			nMenuID	=	IDR_POPUP_SIMUVIEW;
		else if( pView && pView->IsKindOf(RUNTIME_CLASS(CSListView)) )
			nMenuID	=	IDR_POPUP_SLISTVIEW;
		else if( pView && pView->IsKindOf(RUNTIME_CLASS(CGraphView)) )
		{
			pView->PostMessage(WM_USER_MYRBUTTONDOWN,pMsg->wParam,pMsg->lParam);
			nMenuID	=	IDR_POPUP_GRAPHVIEW;
		}
		else if( pView && pView->IsKindOf(RUNTIME_CLASS(CRealTimeView)) )
			nMenuID	=	IDR_POPUP_REALTIMEVIEW;
		else if( pView && pView->IsKindOf(RUNTIME_CLASS(CMultiSortView)) )
			nMenuID	=	IDR_POPUP_MULTISORTVIEW;
		else if( pView && pView->IsKindOf(RUNTIME_CLASS(CBaseView)) )
			nMenuID	=	IDR_POPUP_BASEVIEW;
		else if( pView && pView->IsKindOf(RUNTIME_CLASS(CSelectorView)) )
			nMenuID	=	IDR_POPUP_SETTING;
		else if( pView && pView->IsKindOf(RUNTIME_CLASS(CStrategyView)) )
			nMenuID	=	IDR_POPUP_SIMUVIEW;
		else if( pView && pView->IsKindOf(RUNTIME_CLASS(CGroupView)) )
			nMenuID	=	IDR_POPUP_SETTING;
		else if( pView && pView->IsKindOf(RUNTIME_CLASS(CTechsView)) )
			nMenuID	=	IDR_POPUP_SETTING;

		if( pMainFrame && 0 != nMenuID )
		{
			if( pWnd && WM_RBUTTONUP == pMsg->message )
			{
				CPoint pt;
				pt.x = LOWORD(pMsg->lParam);
				pt.y = HIWORD(pMsg->lParam);
				pWnd->ClientToScreen(&pt);
				
				CMenu	menu;
				if( menu.LoadMenu( nMenuID ) )
				{
					CMenu	*	pMenu	=	menu.GetSubMenu(0);
					for( UINT nMenu=0; pMenu && nMenu<pMenu->GetMenuItemCount(); nMenu++ )
					{
						CMenu	*	pPopupMenu	=	pMenu->GetSubMenu(nMenu);
						pMainFrame->InitMenuPopup( pPopupMenu );
					}
				
					/* ProfUIS Using Code
					CExtPopupMenuWnd * pPopupWnd = new CExtPopupMenuWnd;
					VERIFY( pPopupWnd->UpdateFromMenu( pMainFrame->GetSafeHwnd(), &menu, true, true ) );
					VERIFY( pPopupWnd->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, pMainFrame->GetSafeHwnd() ) );
					*/
					VERIFY( pMenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, pMainFrame ) );
				}
			}
			return TRUE;
		}
	}

	/* ProfUIS Using Code
	if( pMainFrame && pMainFrame->m_wndMenuBar.TranslateMainFrameMessage(pMsg) )
		return TRUE;
	*/

	return CMDIChildWnd::PreTranslateMessage(pMsg);
}

void CChildFrame::OnUpdateFrameTitle(BOOL bAddToTitle)
{
	GetMDIFrame()->OnUpdateFrameTitle(bAddToTitle);

	if ((GetStyle() & FWS_ADDTOTITLE) == 0)
		return;     // leave child window alone!

	CView * pView = GetActiveView( );
	if (bAddToTitle)
	{
		TCHAR szText[256+_MAX_PATH];
		memset( szText, 0, sizeof(szText) );

		if (pView == NULL)
			lstrcpyn(szText, m_strTitle, 256+MAX_PATH);
		else
			pView->SendMessage( WM_USER_GETVIEWTITLE, 255+MAX_PATH, long(szText) );

		// set title if changed, but don't remove completely
		AfxSetWindowText(m_hWnd, szText);
	}
}

/////////////////////////////////////////////////////////////////////////////
// CChildFrame diagnostics

#ifdef _DEBUG
void CChildFrame::AssertValid() const
{
	CMDIChildWnd::AssertValid();
}

void CChildFrame::Dump(CDumpContext& dc) const
{
	CMDIChildWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CChildFrame message handlers

CEnTabCtrl	CChildFrame::m_tabctrl;

int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	/* My Own Tab
	if( !::IsWindow( m_tabctrl.GetSafeHwnd() ) )
	{
		//Create the Tab Control
		if (!m_tabctrl.Create(WS_VISIBLE|WS_CHILD|TCS_TOOLTIPS,
			CRect(0,0,0,0), this, IDC_CHILDFRAME_TABCTRL))
		{
			TRACE0("Unable to create tab control bar\n");
			return -1;
		}

		// set "normal" GUI-font
		CFont	font;
		if( !font.CreateStockObject( DEFAULT_GUI_FONT ) )
			font.CreateStockObject( ANSI_VAR_FONT );
		m_tabctrl.SetFont(&font);
	}
	*/

	return 0;
}

void CChildFrame::ResetClientPosition( BOOL bMaximized )
{
	/* My Own Tab
	CRect	rect;
	GetClientRect( &rect );

	if( bMaximized )
	{
		CView * pView = GetActiveView();
		if( pView && ::IsWindow( pView->GetSafeHwnd() ) )
			pView->SetWindowPos( NULL, rect.left, rect.top+21, rect.Width(), rect.Height()-21, SWP_SHOWWINDOW );
		if( ::IsWindow( m_tabctrl.GetSafeHwnd() ) )
			m_tabctrl.SetWindowPos( NULL, rect.left-5, rect.top, rect.Width()+10, rect.Height(), SWP_SHOWWINDOW );
	}
	else
	{
		CView * pView = GetActiveView();
		if( pView && ::IsWindow( pView->GetSafeHwnd() ) )
			pView->SetWindowPos( NULL, rect.left, rect.top, rect.Width(), rect.Height(), SWP_SHOWWINDOW );
		if( ::IsWindow( m_tabctrl.GetSafeHwnd() ) )
			m_tabctrl.SetWindowPos( NULL, rect.left-5, rect.top, rect.Width()+10, rect.Height(), SWP_SHOWWINDOW );
	}
	*/
}

void CChildFrame::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos) 
{
	/* My Own Tab
	if( !(lpwndpos->flags & SWP_NOSIZE) || !(lpwndpos->flags & SWP_NOMOVE)
		|| (lpwndpos->flags & SWP_SHOWWINDOW) )
	{
		CView * pView = GetActiveView();
		if( pView && ::IsWindow(pView->GetSafeHwnd()) )
			pView->SetWindowPos( NULL, 0,0,0,0, SWP_NOSIZE | SWP_NOMOVE | SWP_HIDEWINDOW );
	}
	*/

	CMDIChildWnd::OnWindowPosChanged(lpwndpos);

	/* My Own Tab
	if( !(lpwndpos->flags & SWP_NOSIZE) || !(lpwndpos->flags & SWP_NOMOVE)
		|| (lpwndpos->flags & SWP_SHOWWINDOW) )
	{
		ResetClientPosition( IsZoomed() );
	}
	*/
}

void CChildFrame::OnTabSelChange(NMHDR* pNMHDR, LRESULT* pResult)
{
	int nSel = m_tabctrl.GetCurSel();
	if( -1 == nSel )
		return;

	CMainFrame	* pFrame = AfxGetMainFrame();
	if( NULL == pFrame )
		return;

	TCITEM tci;
	tci.mask	=	TCIF_PARAM;
	if( m_tabctrl.GetItem( nSel, &tci ) )
	{
		pFrame->OnCmdMsg( tci.lParam, 0, NULL, NULL );
	}
}

void CChildFrame::OnClose()
{
	// TODO: Add your message handler code here and/or call default
	// Get View Title
	CView * pView = GetActiveView( );
	TCHAR szText[256+_MAX_PATH];
	memset( szText, 0, sizeof(szText) );

	if (pView == NULL)
		lstrcpyn(szText, m_strTitle, 256+MAX_PATH);
	else
	{
		BOOL	bCanClose	=	TRUE;
		if( 0 == pView->SendMessage( WM_USER_CANCLOSEVIEW, NULL, (LPARAM)(&bCanClose) )
			&& !bCanClose )
			return;
		pView->SendMessage( WM_USER_GETVIEWTITLE, 255+MAX_PATH, long(szText) );
	}

	// Set sel
	/* My Own Tab
	char	buffer[256+_MAX_PATH];
	memset( buffer, 0, sizeof(buffer) );
	for( int nItem=0; nItem<m_tabctrl.GetItemCount(); nItem++ )
	{
		TCITEM tci;
		tci.mask	=	TCIF_TEXT;
		tci.pszText	=	buffer;
		tci.cchTextMax	=	sizeof(buffer)-1;
		if( m_tabctrl.GetItem( nItem, &tci )
			&& 0 == strncmp( szText, buffer, min(sizeof(szText),sizeof(buffer))-1 ) )
		{
			m_tabctrl.DeleteItem( nItem );
			break;
		}
	}
	*/

	CMDIChildWnd::OnClose();
}

void CChildFrame::OnMDIActivate(BOOL bActivate, CWnd* pActivateWnd, CWnd* pDeactivateWnd)
{
	CMDIChildWnd::OnMDIActivate(bActivate, pActivateWnd, pDeactivateWnd);
	
	// TODO: Add your message handler code here
	// CDocument * pDoc = this->GetActiveDocument( );	// CStaticDoc
	// CView * pView = this->GetActiveView();			// CWizardView, CSListView ...
	// CFrameWnd * pFrame = this->GetActiveFrame( );	// CChildFrame
	// CWnd * pWnd = this->GetActiveWindow( );			// CMainFrame

	/* My Own Tab
	if( bActivate )
	{
		m_tabctrl.SetParent( this );
		m_tabctrl.SetOwner( this );

		// Get View Title
		CView * pView = GetActiveView( );
		TCHAR szText[256+_MAX_PATH];
		memset( szText, 0, sizeof(szText) );

		if (pView == NULL)
			lstrcpyn(szText, m_strTitle, 256+MAX_PATH);
		else
			pView->SendMessage( WM_USER_GETVIEWTITLE, 255+MAX_PATH, long(szText) );

		// Set sel
		char	buffer[256+_MAX_PATH];
		memset( buffer, 0, sizeof(buffer) );
		BOOL	bHas	=	FALSE;
		for( int nItem=0; nItem<m_tabctrl.GetItemCount(); nItem++ )
		{
			TCITEM tci;
			tci.mask	=	TCIF_TEXT;
			tci.pszText	=	buffer;
			tci.cchTextMax	=	sizeof(buffer)-1;
			if( m_tabctrl.GetItem( nItem, &tci )
				&& 0 == strncmp( szText, buffer, min(sizeof(szText),sizeof(buffer))-1 ) )
			{
				m_tabctrl.SetCurSel( nItem );
				bHas	=	TRUE;
				break;
			}
		}

		if( pView && !bHas )
		{
			LPARAM	viewid	=	0;
			pView->SendMessage( WM_USER_GETVIEWCMDID, 0, (LPARAM)&viewid );

			TC_ITEM tci;
			tci.mask = TCIF_TEXT | TCIF_PARAM;
			tci.pszText =	szText;
			tci.lParam	=	viewid;
			m_tabctrl.InsertItem(m_tabctrl.GetItemCount(), &tci);
			m_tabctrl.SetCurSel(m_tabctrl.GetItemCount()-1);
		}
	}
	*/
}

void CChildFrame::OnSize(UINT nType, int cx, int cy)
{
	CMDIChildWnd::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here
	/* My Own Tab
	if( SIZE_MAXIMIZED == nType )
	{
		ResetClientPosition( IsZoomed() );
	}
	*/
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -