📄 mainfrm.cpp
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "g.h"
#include "MainFrm.h"
#include "Mmsystem.h"
#include "gdoc.h"
#include "qdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_CBN_SELENDOK(IDC_CMDSLIST, OnSelendokCmdslist)
ON_COMMAND(IDM_CLEARSEND, OnClearsend)
ON_COMMAND(IDM_SHOW, OnShow)
ON_UPDATE_COMMAND_UI(IDM_SHOW, OnUpdateShow)
ON_WM_TIMER()
ON_COMMAND(IDM_QUICK_EDIT, OnQuickEdit)
ON_COMMAND(IDM_SET_INI, OnSetIni)
ON_COMMAND(ID_TYPED, OnTyped)
ON_BN_CLICKED(IDC_BUTTON, OnButton)
ON_BN_CLICKED(IDC_SEND, OnSend)
//}}AFX_MSG_MAP
ON_COMMAND_RANGE(IDC_HP,IDC_QUIT,OnBarCmd)
// ON_COMMAND(ID_HELP_FINDER, CFrameWnd::OnHelpIndex)
ON_COMMAND_RANGE(IDC_RADIO0,IDC_RADIO5,OnRadio)
ON_COMMAND_RANGE(ID_QK5,ID_QK12,OnQk)
ON_COMMAND_RANGE(ID_NUM1,ID_NUM9,OnNumPad)
ON_COMMAND(IDM_CMD,OnSelendokCmdslist)
ON_MESSAGE(MM_MCINOTIFY, OnMciNotify)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
m_bTalk=FALSE;
CStdioFile file;
if (file.Open(MUD_CFG, CFile::modeRead))
{
file.ReadString(m_dir);
file.Close();
int n=m_dir.ReverseFind('\\');
if(n!=-1)
m_dir = m_dir.Left(n+1);
}
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
Init();
if (!m_wndToolBar.CreateEx(this) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() & ~CBRS_HIDE_INPLACE);
if (!m_wndDlgBar.Create(this, IDR_MAINFRAME,
CBRS_ALIGN_TOP, AFX_IDW_DIALOGBAR))
{
TRACE0("Failed to create dialogbar\n");
return -1; // fail to create
}
m_sendEdit.SubclassDlgItem(IDC_EDIT1,&m_wndDlgBar);
if (!m_wndDlgBar1.Create(this, IDD_DIALOGBAR,
CBRS_ALIGN_BOTTOM, IDD_DIALOGBAR))
{
TRACE0("Failed to create dialogbar\n");
return -1; // fail to create
}
if (!m_wndReBar.Create(this,RBS_BANDBORDERS,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_BOTTOM) ||
!m_wndReBar.AddBar(&m_wndDlgBar)||
!m_wndReBar.AddBar(&m_wndToolBar)||
!m_wndReBar.AddBar(&m_wndDlgBar1))
{
TRACE0("Failed to create rebar\n");
return -1; // fail to create
}
m_wndReBar.SetBarStyle(m_wndReBar.GetBarStyle() & ~CBRS_HIDE_INPLACE);
// TODO: Remove this if you don't want tool tips
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY);
if (!m_wndMyBar.Create(_T(" "), this, CSize(240, 500), TRUE, 123))
{
TRACE0("Failed to create mybar\n");
return -1; // fail to create
}
m_wndMyBar.SetBarStyle(m_wndMyBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_wndMyBar.Init(m_dir+"map.txt");
EnableDocking(CBRS_ALIGN_ANY);
m_wndMyBar.EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndMyBar, AFX_IDW_DOCKBAR_RIGHT);
if(!AfxGetApp()->GetProfileInt("sys","tab",1))
m_wndMyBar.ShowWindow(SW_HIDE);
m_wndMyBar.LoadState("");
InitCheck();
InitRadio();
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU
| WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE;
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
void CMainFrame::OnSend()
{
if(!m_bTalk) //发送指令
{
if(SendChange())
{
::Beep(-1,1);
return;
}
}
CString s;
CEdit* pEdit;
pEdit=(CEdit*)m_wndDlgBar.GetDlgItem(IDC_EDIT1);
pEdit->GetWindowText(s);
if(m_bTalk) //聊天
{
CString who;
m_wndDlgBar1.GetDlgItemText(IDC_WHOEDIT,who);
who.TrimLeft();
if(who.IsEmpty())
{
if(s.Left(1)=="*")
s="chat"+s;
else
s="chat "+s;
}
else
s="tell "+who+" "+s;
}
else if(!s.IsEmpty())
m_sendEdit.BufferCmd(s);
CButton *pCheck=(CButton*)m_wndDlgBar.GetDlgItem(IDC_CHECK2);
if(pCheck->GetCheck())
s.MakeLower();
CGDoc* pDoc=(CGDoc*)GetActiveDocument();
pDoc->SendCmds(s);
pCheck=(CButton*)m_wndDlgBar.GetDlgItem(IDC_CHECK1);
if(!m_bTalk&&pCheck->GetCheck())
{
int n=s.Find(' ');
pEdit->SetSel(++n,-1);
if(n!=-1)
{
int m=s.Find(' ',n);
if(m==-1)
m=s.GetLength();
m_sLastTyped=s.Mid(n,m-n);
}
}
else
pEdit->SetSel(0,-1);
pEdit->SetFocus();
}
BOOL CMainFrame::SendChange()
{
CString s,who;
BOOL ret=FALSE;
int m,n;
CEdit* pEdit=(CEdit*)m_wndDlgBar.GetDlgItem(IDC_EDIT1);
m_wndDlgBar.GetDlgItemText(IDC_EDIT1,s);
n=s.Find(" *");
if(n!=-1)
{
CString who;
m_wndDlgBar1.GetDlgItemText(IDC_WHOEDIT,who);
who=" "+who;
s.Replace(" *",who);
ret=TRUE;
}
n=s.Find('<');
if(n!=-1 && (m=s.Find('>',n))!=-1)
ret=TRUE;
else
m=n=s.GetLength();
pEdit->SetWindowText(s);
pEdit->SetSel(n,m+1);
pEdit->SetFocus();
return ret;
}
void CMainFrame::InitCheck()
{
CButton *pCheck=(CButton*)m_wndDlgBar.GetDlgItem(IDC_CHECK1);
pCheck->SetCheck(1);
pCheck=(CButton*)m_wndDlgBar.GetDlgItem(IDC_CHECK2);
// pCheck->SetCheck(1);
}
void CMainFrame::InitRadio()
{
int i;
CStdioFile file;
CButton* pBt;
CString name,str,temp;
temp=m_dir;
for(i=0;i<=5;i++)
{
name.Format("%scmds%i.txt",temp,i);
file.Open(name,CFile::modeCreate|
CFile::modeNoTruncate|CFile::modeRead);
file.ReadString(str);
file.Close();
if(str.GetLength()>5)
{
str=str.Mid(1,4);
pBt=(CButton* )m_wndDlgBar1.GetDlgItem(IDC_RADIO0+i);
pBt->SetWindowText(str);
}
}
}
void CMainFrame::OnSelendokCmdslist()
{
CComboBox* pCmdBox=(CComboBox*)m_wndDlgBar1.GetDlgItem(IDC_CMDSLIST);
int n=pCmdBox->GetCurSel();
if(n!=CB_ERR)
{
CString s(m_cmdArray.GetAt(n));
m_wndDlgBar.SetDlgItemText(IDC_EDIT1,s);
if(m_bTalk)
{
m_bTalk=FALSE;
m_wndDlgBar.SetDlgItemText(IDC_BUTTON,"指令");
}
SendChange();
}
}
void CMainFrame::OnClearsend()
{
CEdit* pEdit=(CEdit*)m_wndDlgBar.GetDlgItem(IDC_EDIT1);
pEdit->SetWindowText("");
pEdit->SetFocus();
}
void CMainFrame::SetWhoEdit(CString s)
{
CString old,send;
CEdit* pEdit=(CEdit*)m_wndDlgBar.GetDlgItem(IDC_EDIT1);
m_wndDlgBar1.GetDlgItemText(IDC_WHOEDIT,old);
m_wndDlgBar1.SetDlgItemText(IDC_WHOEDIT,s);
pEdit->GetWindowText(send);
send.Replace(old,s);
pEdit->SetWindowText(send);
SendChange();
}
void CMainFrame::OnRadio(UINT nID)
{
int nIndex=nID-IDC_RADIO0;
CString s,temp;
int n;
CComboBox* pCmdBox=(CComboBox*)m_wndDlgBar1.GetDlgItem(IDC_CMDSLIST);
pCmdBox->ResetContent();
m_cmdArray.RemoveAll();
temp=m_dir;
s.Format("%scmds%i.txt",temp,nIndex);
CStdioFile file(s,CFile::modeRead);
while(file.ReadString(s))
{
n=-1;
s.TrimLeft();
n=s.Find(' ');
if(n!=-1)
{
temp=s.Left(n);
s=s.Mid(n);
s.TrimLeft();
m_cmdArray.Add(s);
pCmdBox->AddString(temp);
}
}
file.Close();
pCmdBox->SetCurSel(0);
pCmdBox->ShowDropDown();
}
void CMainFrame::OnShow()
{
ShowControlBar(&m_wndMyBar, !m_wndMyBar.IsVisible(),FALSE);
if(!m_wndMyBar.IsVisible())
m_wndMyBar.m_nState=0;
}
void CMainFrame::OnUpdateShow(CCmdUI* pCmdUI)
{
pCmdUI->Enable();
pCmdUI->SetCheck(m_wndMyBar.IsVisible());
}
void CMainFrame::FocusOnSend()
{
CEdit* pEdit=(CEdit*)m_wndDlgBar.GetDlgItem(IDC_EDIT1);
pEdit->SetFocus();
}
CString CMainFrame::Filt(CString s)
{
if(m_wndMyBar.IsVisible())
return m_wndMyBar.Process(s);
else
return s;
}
void CMainFrame::OnTimer(UINT nIDEvent)
{
CGDoc* pDoc=(CGDoc*)GetActiveDocument();
pDoc->SendTime(nIDEvent);
CFrameWnd::OnTimer(nIDEvent);
}
void CMainFrame::Paste()
{
CEdit* pEdit=(CEdit*)m_wndDlgBar.GetDlgItem(IDC_EDIT1);
pEdit->Paste();
}
BOOL CMainFrame::GetFileName(CString &name, BOOL bOpen)
{
BOOL ret=FALSE;
CFileDialog dlg(bOpen,NULL,NULL,OFN_NOCHANGEDIR|OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT);
if(dlg.DoModal()==IDOK)
{
name=dlg.GetPathName();
ret=TRUE;
}
return ret;
}
void CMainFrame::OnQuickEdit()
{
CQDlg dlg(m_dir+"cmdsquick.txt");
dlg.DoModal();
}
void CMainFrame::OnQk(UINT nID)
{
int n,m=0;
CString s;
CStdioFile file(m_dir+"cmdsquick.txt",CFile::modeRead);
n=nID-ID_QK5;
while(file.ReadString(s))
{
if(m==n)
{
file.Close();
m_wndDlgBar.SetDlgItemText(IDC_EDIT1,s);
OnSend();
return;
}
m++;
}
file.Close();
}
void CMainFrame::OnSetIni()
{
if(GetIniFile())
{
InitRadio();
m_wndMyBar.Init(m_dir+"map.txt");
}
}
BOOL CMainFrame::GetIniFile()
{
/* CFileDialog dlg(TRUE,NULL,NULL, OFN_NOCHANGEDIR|OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"Ini Files (*.ini)|*.ini||");
if(dlg.DoModal()==IDOK)
{
CString s1,s2;
s1=dlg.GetPathName();
::GetCurrentDirectory(100,s2.GetBuffer(100));
s2.ReleaseBuffer();
m_sIniFile=s1.Mid(s2.GetLength()+1);
AfxGetApp()->WriteProfileString("dir","iniFile",m_sIniFile);
return TRUE;
}
*/ return FALSE;
}
void CMainFrame::OnBarCmd(UINT nID)
{
int n=nID-IDC_HP;
CGDoc* pDoc=(CGDoc*)GetActiveDocument();
pDoc->SendCmd(m_sBarCmd[n],FALSE);
m_sendEdit.SetFocus();
}
void CMainFrame::Init()
{
CWinApp* pApp = AfxGetApp();
m_nTime=pApp->GetProfileInt("sys","timeval", 300);
int i;
CString s;
for (i=0; i<8; i++)
{
s.Format("cmd%d", i+1);
m_sBarCmd[i] = pApp->GetProfileString("toolbar", s, "");
}
for (i=0; i<9; i++)
{
s.Format("cmd%d", i+1);
m_sNumCmd[i] = pApp->GetProfileString("numpad", s, "");
}
}
void CMainFrame::OnNumPad(UINT nID)
{
int n=nID-ID_NUM1;
CGDoc* pDoc=(CGDoc*)GetActiveDocument();
pDoc->SendCmd(m_sNumCmd[n]);
}
void CMainFrame::OnTyped()
{
CEdit* pEdit=(CEdit*)m_wndDlgBar.GetDlgItem(IDC_EDIT1);
pEdit->ReplaceSel(m_sLastTyped);
}
BOOL CMainFrame::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
KillTimer(2);
KillTimer(3);
AfxGetApp()->WriteProfileInt("sys","tab",(int)m_wndMyBar.IsVisible());
m_wndMyBar.SaveState("");
return CFrameWnd::DestroyWindow();
}
void CMainFrame::RunAuto(CString s)
{
KillTimer(2);
s.Replace("\n",";");
CGDoc* pDoc=(CGDoc*)GetActiveDocument();
pDoc->m_sScript=s;
SetTimer(2,m_nTime,NULL);
}
void CMainFrame::OnButton()
{
m_bTalk=!m_bTalk;
m_wndDlgBar.SetDlgItemText(IDC_BUTTON,(m_bTalk)?"聊天":"指令");
FocusOnSend();
}
LONG CMainFrame::OnMciNotify(UINT wFlags, LONG lDevId) {
return ((CGDoc*)GetActiveDocument())->OnMciNotify(wFlags,lDevId);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -