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

📄 mainfrm.cpp

📁 3D reconstruction, medical image processing from colons, using intel image processing for based clas
💻 CPP
字号:
// MainFrm.cpp : implementation of the RxMainFrame class//#include "stdafx.h"#include "Fusion.h"#include "MainFrm.h"#include "Splash.h"#include "ToolTipCtrl.h"#include "FrameWnd.h"#include "FrameTop.h"#include "FrameBottom.h"#include "FrameSide.h"#include "FrameHelp.h"#include "FrameTuning.h"#include "FrameMain.h"#include "FMWnd.h"#include "rxlocalizermanager.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// RxMainFrameIMPLEMENT_DYNAMIC(RxMainFrame, CFrameWnd)BEGIN_MESSAGE_MAP(RxMainFrame, CFrameWnd)	//{{AFX_MSG_MAP(RxMainFrame)	ON_WM_CREATE()	ON_WM_SETFOCUS()	ON_WM_GETMINMAXINFO()	ON_WM_SIZE()	ON_WM_ACTIVATE()	ON_WM_ERASEBKGND()	//}}AFX_MSG_MAP	ON_MESSAGE_VOID(UM_INITIALUPDATE, OnInitialUpdate)	ON_NOTIFY(FTB_CHANGED,		RXID_FRAME_TOP,			OnFTTabChanged)	ON_NOTIFY(FBSB_CHANGED,		RXID_FRAME_BOTTOM,		OnFBSeriesChanged)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// RxMainFrame construction/destructionRxMainFrame::RxMainFrame(){	m_nOldMainMenuID	= -2;	m_nCurMainMenuID	= -1;	m_nCurSeries		= -1;	m_pActiveWnd		= NULL;	m_bOverlapTuning	= FALSE;	m_ArrayStatus.SetSize(0, 4);	m_pWndToolTip		= NULL;	m_pWndTop			= NULL;	m_pWndBottom		= NULL;	m_pWndSide			= NULL;	m_pWndHelp			= NULL;	m_pWndTuning		= NULL;	m_pWndPreset		= NULL;	m_pWndMain			= NULL;}RxMainFrame::~RxMainFrame(){	RemoveAllStatus();	if(m_pWndToolTip)	{		m_pWndToolTip->DestroyWindow();		delete m_pWndToolTip;	}}BOOL RxMainFrame::PreCreateWindow(CREATESTRUCT& cs){	if( !CFrameWnd::PreCreateWindow(cs) )		return FALSE;	cs.style |= WS_CLIPCHILDREN | WS_CLIPSIBLINGS;	cs.dwExStyle &= ~WS_EX_CLIENTEDGE;	// Remove default menu	if(cs.hMenu!=NULL)	{		::DestroyMenu(cs.hMenu);      // delete menu if loaded		cs.hMenu = NULL;              // no menu for this window	}	return TRUE;}int RxMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){	// CG: The following line was added by the Splash Screen component.	RxSplashWnd::ShowSplashScreen(this);	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)		return -1;	// Owner draw caption bar	m_Caption.Install(this);	m_pWndToolTip	= new RxToolTipCtrl;	m_pWndToolTip->Create(this, FALSE);	UINT		nStyle = WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;	// create a top control bar	m_pWndTop		= new RxFrameTop;	m_pWndTop->Create		(NULL, NULL, nStyle|WS_VISIBLE, CRect(0,0,0,0), this, RXID_FRAME_TOP);	m_pWndTop->SetFrameAlign(RXFRAME_ALIGN_TOP);	m_pWndTop->SetThickness(36);	// create a bottom control bar	m_pWndBottom	= new RxFrameBottom;	m_pWndBottom->Create	(NULL, NULL, nStyle|WS_VISIBLE, CRect(0,0,0,0), this, RXID_FRAME_BOTTOM);	m_pWndBottom->SetFrameAlign(RXFRAME_ALIGN_BOTTOM);	m_pWndBottom->SetThickness(37);	// create a side control bar	m_pWndSide		= new RxFrameSide;	m_pWndSide->Create		(NULL, NULL, nStyle, CRect(0,0,0,0), this, RXID_FRAME_SIDE);	m_pWndSide->SetFrameAlign(RXFRAME_ALIGN_LEFT);	m_pWndSide->SetThickness(72);	// create a help control bar	m_pWndHelp		= new RxFrameHelp;	m_pWndHelp->Create		(NULL, NULL, nStyle, CRect(0,0,0,0), this, RXID_FRAME_HELP);	m_pWndHelp->SetFrameAlign(RXFRAME_ALIGN_BOTTOM);	m_pWndHelp->SetThickness(30);	m_pWndTuning	= new RxFrameTuning;	m_pWndTuning->Create	(NULL, NULL, nStyle, CRect(0,0,0,0), this, RXID_FRAME_TUNING);	m_pWndTuning->SetFrameAlign(RXFRAME_ALIGN_BOTTOM);	m_pWndTuning->SetThickness(170);	// create a main window	m_pWndMain		= new RxFrameMain;	m_pWndMain->Create		(NULL, NULL, nStyle|WS_VISIBLE, CRect(0,0,0,0), this, RXID_FRAME_MAIN);	return 0;}void RxMainFrame::OnInitialUpdate(){	// 檬扁 橇饭烙狼 傈眉 农扁甫 啊瘤绊 乐绰促.	GetClientRect(m_rcInitialFrame);	// forward UM_INITIALUPDATE message to child windows	HWND		hWndChild	= NULL;	CWnd		*pWnd		= NULL;	for(hWndChild = ::GetTopWindow(m_hWnd); hWndChild != NULL;		hWndChild = ::GetNextWindow(hWndChild, GW_HWNDNEXT))	{		pWnd = (CWnd *)FromHandlePermanent(hWndChild);		if(pWnd != NULL)			pWnd->SendMessage(UM_INITIALUPDATE);	}}BOOL RxMainFrame::OnEraseBkgnd(CDC* pDC) {		return TRUE;}/////////////////////////////////////////////////////////////////////////////// RxMainFrame diagnostics#ifdef _DEBUGvoid RxMainFrame::AssertValid() const{	CFrameWnd::AssertValid();}void RxMainFrame::Dump(CDumpContext& dc) const{	CFrameWnd::Dump(dc);}#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////// RxMainFrame message handlersvoid RxMainFrame::OnSetFocus(CWnd* pOldWnd){	// forward focus to the view window	m_pWndMain->SetFocus();}BOOL RxMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo){	if (m_pWndBottom && m_pWndBottom->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))		return TRUE;	// let the view have first crack at the command	if (m_pWndMain && m_pWndMain->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))		return TRUE;	// otherwise, do default handling	return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);}void RxMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) {	// set the main frame window's minimum tracking size	lpMMI->ptMinTrackSize.x = lpMMI->ptMaxTrackSize.x / 2;	lpMMI->ptMinTrackSize.y = lpMMI->ptMaxTrackSize.y / 2;		CFrameWnd::OnGetMinMaxInfo(lpMMI);}/////////////////////////////////////////////////////////////////////////////void RxMainFrame::OnSize(UINT nType, int cx, int cy) {	CFrameWnd::OnSize(nType, cx, cy);	RecalcFrameWnd(cx, cy);}void RxMainFrame::RecalcFrameWnd(int cx, int cy){	CRect	rcFrame(0, 0, cx, cy);	for (HWND hWndChild = ::GetTopWindow(m_hWnd); hWndChild != NULL;		hWndChild = ::GetNextWindow(hWndChild, GW_HWNDNEXT))	{		RxFrameWnd* pWnd = (RxFrameWnd *)FromHandlePermanent(hWndChild);		if(pWnd->GetStyle() & WS_VISIBLE)		{			UINT	nAlign		= pWnd->GetFrameAlign();			UINT	nThickness	= pWnd->GetThickness();			if(nAlign & RXFRAME_ALIGN_TOP)			{				pWnd->SetWindowPos(NULL, rcFrame.left, rcFrame.top,						rcFrame.Width(), nThickness, SWP_FRAMECHANGED|SWP_NOZORDER);				rcFrame.top += nThickness;			}			else if(nAlign & RXFRAME_ALIGN_BOTTOM)			{				pWnd->SetWindowPos(NULL, rcFrame.left, rcFrame.bottom-nThickness,						rcFrame.Width(), nThickness, SWP_FRAMECHANGED|SWP_NOZORDER);				rcFrame.bottom -= nThickness;			}			else if(nAlign & RXFRAME_ALIGN_LEFT)			{				pWnd->SetWindowPos(NULL, rcFrame.left, rcFrame.top,						nThickness, rcFrame.Height(), SWP_FRAMECHANGED|SWP_NOZORDER);				rcFrame.left += nThickness;			}			else if(nAlign & RXFRAME_ALIGN_RIGHT)			{				pWnd->SetWindowPos(NULL, rcFrame.right-nThickness, rcFrame.top,						nThickness, rcFrame.Height(), SWP_FRAMECHANGED|SWP_NOZORDER);				rcFrame.right -= nThickness;			}			else				pWnd->SetWindowPos(NULL, rcFrame.left, rcFrame.top,						rcFrame.Width(), rcFrame.Height(), SWP_FRAMECHANGED|SWP_NOZORDER);		}	}	UpdateWindow();}void RxMainFrame::GetFrameRectTop(CRect &rect){	rect = m_rcInitialFrame;	rect.bottom = m_pWndTop->GetThickness();}void RxMainFrame::GetFrameRectSide(CRect &rect){	rect = m_rcInitialFrame;	rect.right = m_pWndSide->GetThickness();}void RxMainFrame::GetFrameRectBottom(CRect &rect){	rect = m_rcInitialFrame;	rect.bottom = m_pWndBottom->GetThickness();}void RxMainFrame::GetFrameRectTuning(CRect &rect){	rect = m_rcInitialFrame;	rect.right -= (m_pWndSide->GetThickness()   + 4);	rect.bottom = (m_pWndTuning->GetThickness() - 4);}void RxMainFrame::GetFrameRectMain(CRect &rect){	rect = m_rcInitialFrame;	rect.right  = m_rcInitialFrame.right  - 4;	rect.bottom = m_rcInitialFrame.bottom - m_pWndTop->GetThickness() - m_pWndBottom->GetThickness() - 4;	_FSTATUS	*pStatus = GetStatus(m_nCurMainMenuID);	if(pStatus->nSide)		rect.right -= m_pWndSide->GetThickness();	if(!m_bOverlapTuning)	{		if(pStatus->nHelp)			rect.bottom -= m_pWndHelp->GetThickness();		if(pStatus->nTP > 0 && m_nCurSeries != RXSERIES_COM)			rect.bottom -= m_pWndTuning->GetThickness();	}}void RxMainFrame::GetFMWndRectLoad(CRect &rect){	rect		= m_rcInitialFrame;	rect.bottom -= (m_pWndTop->GetThickness() + m_pWndBottom->GetThickness() + 4);	rect.right  -= 4;}/////////////////////////////////////////////////////////////////////////////// main tab managementvoid RxMainFrame::OnFTTabChanged(NMHDR* pNMHDR, LRESULT* pResult){	NMFT_BUTTON		*pNMFT = (NMFT_BUTTON *)pNMHDR;	SetCurMainMenu(pNMFT->nCurTab, FALSE);	*pResult = 0;}BOOL RxMainFrame::SetCurMainMenu(int nID, BOOL bWithControl){	if(m_nCurMainMenuID == nID)		return FALSE;	m_nOldMainMenuID = m_nCurMainMenuID;	m_nCurMainMenuID = nID;	//	HWND		hWndChild;	RxFrameWnd	*pWnd;	for (hWndChild = ::GetTopWindow(m_hWnd); hWndChild != NULL;		hWndChild = ::GetNextWindow(hWndChild, GW_HWNDNEXT))	{		pWnd = (RxFrameWnd *)FromHandlePermanent(hWndChild);		pWnd->OnSwitchToMainMenu(FALSE, m_nOldMainMenuID, m_nCurMainMenuID);	}	// frame top 俊 困摹茄 滚瓢甸阑 汲沥秦 霖促.	if(bWithControl)		m_pWndTop->SetCurTab(m_nCurMainMenuID);	// frame 葛剧阑 犁备己茄促.	SwitchToStatus(m_nCurMainMenuID);	//	for (hWndChild = ::GetTopWindow(m_hWnd); hWndChild != NULL;		hWndChild = ::GetNextWindow(hWndChild, GW_HWNDNEXT))	{		pWnd = (RxFrameWnd *)FromHandlePermanent(hWndChild);		pWnd->OnSwitchToMainMenu(TRUE, m_nOldMainMenuID, m_nCurMainMenuID);	}	return TRUE;}/////////////////////////////////////////////////////////////////////////////// series index managementvoid RxMainFrame::OnFBSeriesChanged(NMHDR* pNMHDR, LRESULT* pResult){	NMFB_SERIES_BUTTON	*pNMFBSB = (NMFB_SERIES_BUTTON *)pNMHDR;	SetCurSeries(pNMFBSB->nCurSeries, FALSE);	*pResult = 0;}BOOL RxMainFrame::SetCurSeries(int nCurSeries, BOOL bWithControl){	if(m_nCurSeries == nCurSeries)		return FALSE;	m_nCurSeries = nCurSeries;	// frame bottom 俊 困摹茄 滚瓢甸阑 汲沥秦 霖促.	if(bWithControl)		m_pWndBottom->SetRadioSeries(m_nCurSeries);	if(m_nCurMainMenuID == IDF_TOP_3DFUSION)	{		SwitchToStatus(m_nCurMainMenuID);		// frame tuning 俊 困摹茄 Control甸狼 蔼阑 犁汲沥茄促.		m_pWndTuning->OnChangedSeries(m_nCurSeries);		m_pWndBottom->UpdateWindowing(TRUE);		m_pWndMain->Frame3DF_OnChangedSeries(m_nCurSeries);	}	// series 啊 官拆锭 zoom factor甫 炼例秦霖促.	if(m_pWndMain->GetLocalizerManager(m_nCurSeries))	{		m_pWndMain->GetLocalizerManager(m_nCurSeries)->DetermineZoomFactor();		m_pWndMain->GetLocalizerManager(m_nCurSeries)->RedrawAll();	}	return TRUE;}/////////////////////////////////////////////////////////////////////////////// Active Window managementvoid RxMainFrame::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) {	CFrameWnd::OnActivate(nState, pWndOther, bMinimized);	m_nActiveTop = nState;	if(m_pActiveWnd)		m_pActiveWnd->RedrawNCWnd(RXRS_CAPTION);}UINT RxMainFrame::IsTopActived(){	return m_nActiveTop;}void RxMainFrame::SetActiveWnd(RxFMWnd *pWndCur){	RxFMWnd	*pWndOld = m_pActiveWnd;	if(pWndOld == pWndCur)		return;				  // do not re-activate if SetActiveWnd called more than once	m_pActiveWnd = NULL;	// deactivate the old one	if (pWndOld != NULL)		pWndOld->OnActivateWnd(FALSE, pWndCur, pWndOld);	// if the OnActivateView moves the active window,	//    that will veto this change	if (m_pActiveWnd != NULL)		return;     // already set	m_pActiveWnd = pWndCur;	// activate	if (pWndCur != NULL)		pWndCur->OnActivateWnd(TRUE, pWndCur, pWndOld);}RxFMWnd* RxMainFrame::GetActiveWnd(){	return m_pActiveWnd;}void RxMainFrame::ToolTipTrack(CPoint point, LPCTSTR lpszText){	m_pWndToolTip->Track(point, lpszText);}void RxMainFrame::ToolTipHide(){	m_pWndToolTip->Hide();}/////////////////////////////////////////////////////////////////////////////// frame status managementvoid RxMainFrame::OnOpenDicom(){	// extended bottom dialog bar狼 惑怕甫 檬扁拳 秦霖促.	InitStatus();	// default combine mode	SetCurSeries(RXSERIES_COM);	m_pWndTop->EnableButton(1, TRUE);	m_pWndMain->OnOpenDicom();	m_pWndTuning->OnOpenDicom();	SetCurMainMenu(IDF_TOP_3DFUSION);}void RxMainFrame::InitStatus(){	if(m_ArrayStatus.GetSize())		RemoveAllStatus();	// AddStatus : nID, side frame, help frame, tuning/preset frame	AddStatus(IDF_TOP_LOAD,		0, 0, 0);	AddStatus(IDF_TOP_3DFUSION,	1, 0, 1);	AddStatus(IDF_TOP_REPORT,	1, 0, 0);}void RxMainFrame::AddStatus(int nID, int nSide, int nHelp, int nTP){	_FSTATUS	*pStatus	= new _FSTATUS;	pStatus->nID	= nID;	pStatus->nSide	= nSide;	pStatus->nHelp	= nHelp;	pStatus->nTP	= nTP;	m_ArrayStatus.Add(pStatus);}void RxMainFrame::SwitchToStatus(int nID){	_FSTATUS	*pStatus = GetStatus(nID);	if(pStatus)	{		if(pStatus->nSide)		{			m_pWndSide->ShowWindow(SW_SHOW);		}		else			m_pWndSide->ShowWindow(SW_HIDE);		if(pStatus->nHelp)		{			m_pWndHelp->ShowWindow(SW_SHOW);			m_pWndBottom->SetCheckHelp(TRUE);		}		else		{			m_pWndHelp->ShowWindow(SW_HIDE);			m_pWndBottom->SetCheckHelp(FALSE);		}		if(pStatus->nTP)		{			if(m_nCurSeries == RXSERIES_COM)				m_pWndTuning->ShowWindow(SW_HIDE);			else				m_pWndTuning->ShowWindow(SW_SHOW);			m_pWndBottom->SetCheckTuning(TRUE);		}		else		{			m_pWndTuning->ShowWindow(SW_HIDE);			m_pWndBottom->SetCheckTuning(FALSE);		}	}	CRect	rcClient;	GetClientRect(rcClient);	RecalcFrameWnd(rcClient.Width(), rcClient.Height());}void RxMainFrame::SetStatusHelp(int nHelp){	_FSTATUS	*pStatus;	pStatus = GetStatus(m_nCurMainMenuID);	if(nHelp < 0)	{		if(pStatus->nHelp == 0)		nHelp = 1;		else						nHelp = 0;	}	pStatus->nHelp = nHelp;	SwitchToStatus(m_nCurMainMenuID);	m_pWndMain->RecalcLayout(FRAME_RECALC_PART);}void RxMainFrame::SetStatusTP(int nTP){	_FSTATUS	*pStatus;	pStatus = GetStatus(m_nCurMainMenuID);	if(nTP < 0)	{		if(pStatus->nTP == 0)			nTP = 1;		else if(pStatus->nTP == 1)		nTP = 0;	}	pStatus->nTP = nTP;	SwitchToStatus(m_nCurMainMenuID);	m_pWndMain->RecalcLayout(FRAME_RECALC_PART);}_FSTATUS* RxMainFrame::GetStatus(int nID){	int		nCount = m_ArrayStatus.GetSize();	_FSTATUS	*pStatus;	for(int i = 0; i < nCount; i++)	{		pStatus = (_FSTATUS *)m_ArrayStatus.GetAt(i);		if(nID == pStatus->nID)			return pStatus;	}	return NULL;}void RxMainFrame::RemoveAllStatus(){	int		nCount = m_ArrayStatus.GetSize();	_FSTATUS	*pStatus;	for(int i = 0; i < nCount; i++)	{		pStatus = (_FSTATUS *)m_ArrayStatus.GetAt(i);		delete pStatus;	}	m_ArrayStatus.RemoveAll();}

⌨️ 快捷键说明

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