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

📄 mainfrm.cpp

📁 CMUD源码 用来玩MUD游戏的 没开发完
💻 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 + -