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

📄 mainfrm.cpp

📁 一款国产的8051模拟器(全部源代码) 本软件是一款8051模拟器
💻 CPP
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "MDIDemo.h"
#include "MyDefaultView.h"
#include "MainFrm.h"

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

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_COMMAND(ID_FILE_NEW, OnFileNew)
	ON_WM_SIZE()
	ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, OnSelchangeTabInfo)
	//}}AFX_MSG_MAP
	ON_COMMAND(IDC_RUNALL, ONRUNALL)
	ON_COMMAND(ID_CPUSTOP, ONSTOP)
	ON_COMMAND_RANGE(ID_MENUITEM32775,ID_MENUITEM32781,OnSetThreadPriority)
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CEnTabCtrl  ptab;
CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
	
}

CMainFrame::~CMainFrame()
{
}

void CMainFrame::OnSetThreadPriority(UINT uid)
{
	if(DeviceMag.pcpurunthread==NULL)
	{
		AfxMessageBox("没有创建处理器线程,请先创建一个处理器");
		return ;
	}
	int ip;
	switch(uid)
	{
	case ID_MENUITEM32775:
		ip=THREAD_PRIORITY_TIME_CRITICAL;
		break;
	case ID_MENUITEM32776:
		ip=THREAD_PRIORITY_HIGHEST;
		break;
	case ID_MENUITEM32777:
		ip=THREAD_PRIORITY_ABOVE_NORMAL;
		break;
	case ID_MENUITEM32778:
		ip=THREAD_PRIORITY_NORMAL;
		break;
	case ID_MENUITEM32779:
		ip=THREAD_PRIORITY_BELOW_NORMAL;
		break;
	case ID_MENUITEM32780:
		ip=THREAD_PRIORITY_LOWEST;
		break;
	case ID_MENUITEM32781:
		ip=THREAD_PRIORITY_IDLE;
		break;
	}
	
	//::GetMenu
	menu.CheckMenuRadioItem(ID_MENUITEM32775,ID_MENUITEM32781, uid, MF_BYCOMMAND);
	DeviceMag.pcpurunthread->SetThreadPriority(ip);
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}

	if (!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return -1;      // fail to create
	}
	//ptab->InsertItem(0,"操作信息");
	//ptab->InsertItem(1,"历史纪录");
	// TODO: Delete these three lines if you don't want the toolbar to
	//  be dockable
	//CChildFrame * defaul[256];
	memset(defaul,0,sizeof(CChildFrame *));
	FrameNum=0;
	
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);
	CreateMybar();
	HMENU  m_hMenu=::GetMenu(this->m_hWnd);
	menu.Attach(m_hMenu);
	menu.CheckMenuRadioItem(ID_MENUITEM32775,ID_MENUITEM32781, ID_MENUITEM32778, MF_BYCOMMAND);
	this->SendMessage(WM_COMMAND ,ID_FILE_NEW,0);
	CToolBarCtrl & barctrl=m_wndToolBar.GetToolBarCtrl();
	//barctrl.Indeterminate(IDC_RUNALL,FALSE);
	barctrl.Indeterminate(ID_CPUSTOP,TRUE);
	//HINSTANCE hInst = AfxGetResourceHandle();
	//HMENU  m_hMenu=::LoadMenu(hInst, MAKEINTRESOURCE(IDR_MENU1));
	//::SetMenu(this->GetSafeHwnd(),m_hMenu);
	MyDefaultView * pview=(MyDefaultView *)defaul[0]->GetActiveView();
	pview->WndMag.CreateAbout();
	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CMDIFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CMDIFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CMDIFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers

void CMainFrame::ONRUNALL()
{
	//AfxMessageBox("ONRUNALL()");
	int i=DeviceMag.RUN();
	CString str;
	if(i==-1)
	{
		AfxMessageBox("没有可运行的处理器");
		return ;
	}
	if(i!=257)
	{
		str.Format("%s没有正确配置",DeviceMag.DTCB[ID_TYPE_8051CPU].DEVICEINFO[i].pDeviceName);
		AfxMessageBox(str);
		return ;
	}
	CToolBarCtrl & barctrl=m_wndToolBar.GetToolBarCtrl();
	barctrl.Indeterminate(IDC_RUNALL,TRUE);
	barctrl.Indeterminate(ID_CPUSTOP,FALSE);
	
		
}
void CMainFrame::ONSTOP()
{
	if(DeviceMag.STOP()==-1)
	{
		AfxMessageBox("停止运行失败,请再次停止运行");
		return;
	}
	CToolBarCtrl & barctrl=m_wndToolBar.GetToolBarCtrl();
	barctrl.Indeterminate(IDC_RUNALL,FALSE);
	barctrl.Indeterminate(ID_CPUSTOP,TRUE);
}
int CMainFrame::CreateMybar()
{
	if(!m_wndToolBar1.Create(this,IDD_DIALOG1,WS_CHILD|WS_VISIBLE|
		CBRS_TOP|CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | 
		CBRS_SIZE_DYNAMIC,IDD_DIALOG1))
	{
		TRACE0("Failed to create dialogbar\n");
		return -1;      // fail to create
	}
	//ptab=new CEnTabCtrl;
	CRect Rect;
/*	m_wndToolBar1.GetDlgItem(IDC_TAB1)->GetWindowRect(&Rect);
	CString str;
	str.Format("l=%d,r=%d,top=%d,bot=%d",Rect.left,Rect.right,Rect.top,Rect.bottom);
	AfxMessageBox(str);*/
	//ptab->Create(
	Rect.left=-2;
	Rect.top=2;
	Rect.bottom=171;
	Rect.right=244;
	ptab.Create(WS_VISIBLE|WS_CHILD|TCS_BOTTOM,Rect,&m_wndToolBar1,IDC_TAB1);
//	ptab=(CEnTabCtrl *)m_wndToolBar1.GetDlgItem(IDC_TAB1);
	


	//CRect Rect;
	this->GetWindowRect(&Rect);	
/*	CString str;
	str.Format("l=%d,r=%d,top=%d,bot=%d",Rect.left,Rect.right,Rect.top,Rect.bottom);
	AfxMessageBox(str);*/
	ptab.SetWindowPos(NULL,0,0,Rect.right-Rect.left,20,SWP_NOMOVE);
	//COLORREF m_color;
	//ETC_FLAT|ETC_COLOR|ETC_GRADIENT|ETC_BACKTABS;
	DWORD dwFlags =ETC_FLAT|ETC_COLOR|ETC_SELECTION|ETC_GRADIENT;
	COLORREF m_color=0;
	CColorDialog dialog(m_color);

	m_color=RGB(0x90,0x90,0xff);
	//if (dialog.DoModal() == IDOK)
	//	m_color = dialog.GetColor();
	/*CString str;
	str.Format("颜色值=0x%08X",m_color);
	AfxMessageBox(str);*/
	ptab.SetBkgndColor(m_color);
	//ptab->EnableDraw(m_bFlat ? BTC_ALL : dwFlags ? BTC_TABS : BTC_NONE); 
	ptab.EnableDraw(BTC_ALL); //BTC_TABS : BTC_NONE
	ptab.EnableCustomLook(dwFlags | 1, dwFlags);//1是backcolor
	LOGFONT font;
	font.lfHeight=-13;font.lfWidth=0;
	font.lfEscapement=0;font.lfOrientation=0;
	font.lfWeight=400;font.lfItalic=0;font.lfUnderline=0;
	font.lfStrikeOut=0;
	font.lfCharSet=134;font.lfOutPrecision=3;font.lfClipPrecision=2;
	font.lfQuality=1;font.lfPitchAndFamily=2;
	memcpy(font.lfFaceName,_T("宋体"),5);
	ptab.pmyWnd=(CChildFrame **)defaul;
/*	CFontDialog fdlg(&font);
	if(fdlg.DoModal()==IDOK)
	{
		fdlg.GetCurrentFont(&font);
	}
	
	CString str;
	str.Format("lfHeight=%d\r\nlfWidth=%d\r\nlfEscapement=%d\r\nlfOrientation=%d\r\nlfWeight=%d\r\nlfItalic=%d\r\nlfUnderline=%d\r\nlfStrikeOut=%d\r\nlfCharSet=%d\r\nlfOutPrecision=%d\r\nlfClipPrecision=%d\r\nlfQuality=%d\r\nlfPitchAndFamily=%d\r\nlfFaceName=%s\r\n",
		font.lfHeight,font.lfWidth,font.lfEscapement,font.lfOrientation,font.lfWeight,font.lfItalic,font.lfUnderline,font.lfStrikeOut,
		font.lfCharSet,font.lfOutPrecision,font.lfClipPrecision,font.lfQuality,font.lfPitchAndFamily,font.lfFaceName
		);
	AfxMessageBox(str);
*/
	if(!pFount.CreateFontIndirect(&font))
	{
		AfxMessageBox("CreateFontIndirect");
	}
	ptab.SetFont(&pFount);
	ptab.Invalidate();
	Invalidate();
	return 0;
	//m_mybar.LoadBitmap(IDR_MAINFRAME);
}

void CMainFrame::OnFileNew() 
{
	// TODO: Add your command handler code here
	//CChildFrame
	
	
	defaul[FrameNum]=new CChildFrame();
	
	defaul[FrameNum]->istabclose=0;
	//m_pInput->m_wndBar=&m_wndToolBar1;
	CCreateContext context;
	context.m_pNewViewClass=RUNTIME_CLASS(MyDefaultView);
	
	if(!defaul[FrameNum]->LoadFrame(IDR_MAINFRAME,WS_MAXIMIZE|WS_OVERLAPPEDWINDOW,this,&context))
		return;
	//MyDefaultView * pview=(MyDefaultView *)context.m_pLastView;     
	//
	CString str;
	str.Format("工作空间%d",FrameNum);
	if(!ptab.InsertItem(ptab.tatoloftab,str.GetBuffer(str.GetLength())))
	{
		//AfxMessageBox("InsertItem失败");
	}
	ptab.SetCurSel(ptab.tatoloftab);
	ptab.Invalidate();
	Invalidate();
	TC_ITEM  ptcitem;
	//TC_ITEM * ptcitem1;
	memset(&ptcitem,0,sizeof(TCITEM));
	//memset(&ptcitem1,0,sizeof(TCITEM));
	//AfxMessageBox(str);
	//ptcitem.mask=TCIF_PARAM;
	//ptab.GetItem(FrameNum,&ptcitem);
	ptcitem.mask=TCIF_PARAM;
	ptcitem.lParam=FrameNum;
	ptab.SetItem(ptab.tatoloftab,&ptcitem);
//	ptcitem.mask=TCIF_PARAM;
//	ptab.GetItem(ptab.tatoloftab,&ptcitem);
//	CString str1;
//	str1.Format("setlParam%d,FrameNum=%d",ptcitem.lParam,ptab.tatoloftab);
//	AfxMessageBox(str1);
	defaul[FrameNum]->ShowWindow(SW_SHOWMAXIMIZED);
	//defaul[FrameNum]->InitialUpdateFrame(NULL,true);
	defaul[FrameNum]->SetWindowText(str.GetBuffer(str.GetLength()));
	
	ptab.tatoloftab++;
	FrameNum++;
}

void CMainFrame::OnSize(UINT nType, int cx, int cy) 
{
	CMDIFrameWnd::OnSize(nType, cx, cy);
	//ptab=(CEnTabCtrl *)m_wndToolBar1.GetDlgItem(IDC_TAB1);
	CRect Rect;
	this->GetWindowRect(&Rect);	
	/*CString str;
	str.Format("l=%d,r=%d,top=%d,bot=%d",Rect.left,Rect.right,Rect.top,Rect.bottom);
	AfxMessageBox(str);*/
	ptab.SetWindowPos(NULL,0,0,Rect.right-Rect.left-7,20,SWP_NOMOVE);
	// TODO: Add your message handler code here
	ptab.Invalidate();
	Invalidate();
	
	
}

void CMainFrame::OnSelchangeTabInfo(NMHDR* pNMHDR, LRESULT* pResult) 
{
	TCITEM  ptcitem;
	memset(&ptcitem,0,sizeof(TCITEM));
	ptcitem.mask=TCIF_PARAM;
	ptab.GetItem(ptab.GetCurSel(),&ptcitem);
//	CString str;
//	str.Format("GetCurSel()=%d,ptcitem->lParam=%d..%s",ptab.GetCurSel(),ptcitem.lParam);
//	AfxMessageBox(str);
	//CWnd * wnd=(CWnd *)pmyWnd[ptcitem.lParam];
	CChildFrame * pcf=(CChildFrame *)defaul[ptcitem.lParam];
	if(pcf!=NULL)
	{
		pcf->MDIActivate();
		return;
	}
	
	
}

⌨️ 快捷键说明

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