📄 fcdlg.cpp
字号:
#include "stdafx.h"
#include "FC.h"
#include "FCDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
CFCDlg::CFCDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFCDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CFCDlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_bSaved=TRUE;
m_iPosition=1;
m_strPrecision="6";
m_iStatus=1;
m_strEdit="";
m_strFile="";
m_iBack=4;
m_iBackChoice=0;
m_bBlankLine=TRUE;
m_bExitWait=TRUE;
m_bMainFunction=FALSE;
m_bOpSpace=FALSE;
m_bOutPrecision=FALSE;
m_bOutRuntime=FALSE;
m_strCppFile="";
}
void CFCDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFCDlg)
DDX_Text(pDX, IDC_EDIT, m_strEdit);
DDX_CBString(pDX, IDC_PRECISION, m_strPrecision);
DDX_Text(pDX, IDC_POSITION, m_iPosition);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFCDlg, CDialog)
//{{AFX_MSG_MAP(CFCDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDB_OPEN, OnOpen)
ON_BN_CLICKED(IDB_SAVE, OnSave)
ON_BN_CLICKED(IDB_SAVE_AS, OnSaveAs)
ON_BN_CLICKED(IDB_RUN, OnRun)
ON_BN_CLICKED(IDB_CLEAR, OnClear)
ON_BN_CLICKED(IDB_ABOUT_EDIT, OnAboutEdit)
ON_BN_CLICKED(IDB_ABOUT_GRM, OnAboutGrm)
ON_BN_CLICKED(ID_APP_ABOUT, OnAppAbout)
ON_EN_CHANGE(IDC_EDIT, OnChangeEdit)
ON_BN_CLICKED(IDB_SET_POSITION, OnSetPosition)
ON_EN_KILLFOCUS(IDC_POSITION, OnKillfocusPosition)
ON_CBN_KILLFOCUS(IDC_PRECISION, OnKillfocusPrecision)
ON_BN_CLICKED(IDB_TRANSLATE, OnTranslate)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CFCDlg::OnInitDialog()
{
CDialog::OnInitDialog();
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
GetDlgItem(IDC_STATIC_PRECISION)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_PRECISION)->ShowWindow(SW_HIDE);
return TRUE; // return TRUE unless you set the focus to a control
}
void CFCDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
void CFCDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
dc.DrawIcon(x, y, m_hIcon);
}
else
CDialog::OnPaint();
}
HCURSOR CFCDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
//CFCDlg 消息处理函数//////////////////////////////////////////////////////////
void CFCDlg::OnOpen()
{
UpdateData(TRUE);
switch(m_iStatus)
{
case 1://edit
On_OpenSource();
break;
case 2://compile
On_OpenCode();
break;
case 3://about
break;
case 4://translate
break;
}
UpdateData(FALSE);
}
void CFCDlg::OnSave()
{
UpdateData(TRUE);
switch(m_iStatus)
{
case 1://eidt
On_SaveSource();
break;
case 2://compile
On_SaveCode();
break;
case 3://about
On_SaveAbout();
break;
case 4://translate
break;
}
UpdateData(FALSE);
}
void CFCDlg::OnSaveAs()
{
UpdateData(TRUE);
switch(m_iStatus)
{
case 1://edit
On_SaveAsSource();
break;
case 2://compile
On_SaveResult();
break;
case 3://about
break;
case 4://translate
break;
}
UpdateData(FALSE);
}
void CFCDlg::OnRun()
{
UpdateData(TRUE);
switch(m_iStatus)
{
case 1://edit
On_Compile();
break;
case 2://compile
On_Interpret();
break;
case 3://about
break;
case 4://translate
break;
}
UpdateData(FALSE);
}
void CFCDlg::OnClear()
{
UpdateData(TRUE);
switch(m_iStatus)
{
case 1://edit
m_strEdit="";
m_strFile="";
m_bSaved=TRUE;
SetWindowText("FC 2.2");
break;
case 2://compile
m_strEdit="";
SetWindowText("FC 2.2 - 解释器");
break;
case 3://about
break;
case 4://translate
break;
}
UpdateData(FALSE);
}
void CFCDlg::OnAboutEdit()
{
UpdateData(TRUE);
if(m_iStatus==1)//edit
On_AboutEdit();
UpdateData(FALSE);
}
void CFCDlg::OnAboutGrm()
{
UpdateData(TRUE);
if(m_iStatus==1)//edit
On_AboutGrm();
UpdateData(FALSE);
}
void CFCDlg::OnAppAbout()
{
UpdateData(TRUE);
if(m_iStatus==1)//edit
{
CAboutDlg dlg;
dlg.DoModal();
}
UpdateData(FALSE);
}
void CFCDlg::OnCancel()
{
UpdateData(TRUE);
switch(m_iStatus)
{
case 1://edit
On_Exit();
break;
case 2://compile
On_ExitCompile();
break;
case 3://about
On_ExitAbout();
break;
case 4://translate
On_ExitTranslate();
break;
}
UpdateData(FALSE);
}
void CFCDlg::OnChangeEdit()
{
if(m_iStatus!=1)
return;
if(m_bSaved)
{
m_bSaved=FALSE;
if(m_strFile=="")
SetWindowText("FC 2.2 *");
else
SetWindowText("FC 2.2 - "+m_strFile+" *");
}
}
void CFCDlg::OnKillfocusPrecision()
{
if(m_iStatus!=2)
return;
int OldPrecision=atoi(m_strPrecision),precision;
UpdateData(TRUE);
int i,length=m_strPrecision.GetLength();
for(i=0;i<length;i++)
if(m_strPrecision[i]<'0' || m_strPrecision[i]>'9')
break;
if(i==0 || i!=length)
{
MessageBox("请输入正确的“输出精度”!\n","FC 2.1",MB_OK|MB_ICONEXCLAMATION);
GetDlgItem(IDC_PRECISION)->SetFocus();
((CEdit*)GetDlgItem(IDC_PRECISION))->SetSel(0,-1);
return;
}
precision=atoi(m_strPrecision);
if(precision<0 )precision=0;
if(precision>15)precision=15;
if(precision!=OldPrecision)
{
m_strPrecision.Format("%d",precision);
UpdateData(FALSE);
if(MessageBox("要重新执行程序吗?","FC 2.2",MB_YESNO|MB_ICONQUESTION)==IDYES)
On_Interpret();
}
}
void CFCDlg::OnKillfocusPosition()
{
if(m_iStatus!=1)
return;
UpdateData(TRUE);
UINT nLine=((CEdit*)GetDlgItem(IDC_EDIT))->GetLineCount();
if(m_iPosition<1)m_iPosition=1;
if(m_iPosition>nLine)m_iPosition=nLine;
UpdateData(FALSE);
}
void CFCDlg::OnSetPosition()
{
if(m_iStatus!=1)
return;
UpdateData(TRUE);
CEdit *pEdit=(CEdit*)GetDlgItem(IDC_EDIT);
pEdit->SetFocus();
pEdit->SetSel(pEdit->LineIndex(m_iPosition-1),pEdit->LineIndex(m_iPosition));
}
void CFCDlg::OnTranslate()
{
if(m_iStatus!=1)
return;
UpdateData(TRUE);
On_Translate();
UpdateData(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -