📄 mainfrm.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 + -