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

📄 mainfrm.cpp

📁 点歌系统
💻 CPP
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "songserver.h"
#include "MainFrm.h"

#include "Login.h"
#include "UserManage.h"
#include "SongManage.h"
#include "ConnectDB.h"
#include "BackupRestoreDB.h"

#include "SonglistView.h"
#include "ServerSocket.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_COMMAND(ID_Admin, OnAdmin)
	ON_COMMAND(ID_User, OnUser)
	ON_COMMAND(ID_ConnectDB, OnConnectDB)
	ON_COMMAND(ID_CloseDB, OnCloseDB)
	ON_COMMAND(ID_BackupDB, OnBackupDB)
	ON_COMMAND(ID_RestoreDB, OnRestoreDB)
	ON_COMMAND(ID_Usermanage, OnUsermanage)
	ON_COMMAND(ID_SongManage, OnSongManage)
 	ON_COMMAND(ID_BeginServer, OnBeginServer)
	ON_COMMAND(ID_StopServer, OnStopServer)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

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

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	m_pConnectionPtr = NULL;
}

CMainFrame::~CMainFrame()
{
	OnCloseDB();
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::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
	}

	// TODO: Delete these three lines if you don't want the toolbar to
	//  be dockable
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);
	 
	m_MenuAdmin.LoadMenu(IDR_Admin);
	m_MenuDefault.Attach(::GetMenu(m_hWnd));	
  
 	return 0;
}

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
    if( !m_WndSplitter.CreateStatic(this, 1, 2) )
	{
		TRACE("create static faild\n");
		return false;
	}
	if( !m_WndSplitter.CreateView(0, 0, RUNTIME_CLASS(CSonglistView), CSize(150, 150), pContext) )
	{
		TRACE("create first view faild\n");
		return false;
	}
	if( !m_WndSplitter.CreateView(0, 1, pContext->m_pNewViewClass, CSize(0, 0), pContext) )
	{
		TRACE("create second view faild\n");
		return false;
	}

	m_WndSplitter.SetActivePane(0,1);
 
	return true;
}

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 | FWS_ADDTOTITLE
		| WS_THICKFRAME | 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::OnBeginServer() 
{
 	CServerSocket serversocket;
	serversocket.BeginServer();
}

void CMainFrame::OnStopServer() 
{
	CServerSocket serversocket;
	serversocket.StopServer();
}

void CMainFrame::OnAdmin() 
{
    CLogin login;
	if( login.DoModal() != IDOK )
		return;

	if( !m_addrecord.AdminLogin(login.GetUsername(), login.GetPassword()) )
	{
		AfxMessageBox("用户名不存在,或密码错误.");
		return;
	}

 	SetMenu(&m_MenuAdmin);
}

void CMainFrame::OnUser() 
{
    CLogin login;
	login.SetUserLevels(false);
	if( login.DoModal() != IDOK )
		return;

	if( !m_addrecord.UserLogin(login.GetUsername(), login.GetPassword()) )
	{
		AfxMessageBox("用户名不存在.");
		return;
	}

	SetMenu(&m_MenuDefault);
}

void CMainFrame::OnConnectDB() 
{
  	CConnectDB condb;
	if(condb.DoModal() != IDOK)
		return;

	CString strsql;
	strsql.Format("driver={SQL Server};Server=%s;DATABASE=%s;UID=%s;PWD=%s;", \
			       condb.GetServerIP(), condb.GetDBName(), \
				   condb.GetUsername(), condb.GetPassword());
	try
	{
		OnCloseDB();
 		m_pConnectionPtr.CreateInstance(__uuidof(Connection));
		HRESULT hr=m_pConnectionPtr->Open((_bstr_t)strsql, "", "", adModeUnknown);

 		//将连接成功的指针传给CAddRecord类
		m_addrecord.SetConnectionPtr(m_pConnectionPtr);
	}
	catch(_com_error e)
	{
		AfxMessageBox((CString)e.ErrorMessage() + " 连接数据库失败.");
		return;
	}

 	AfxMessageBox("连接成功.", MB_OK | MB_ICONINFORMATION);
}

void CMainFrame::OnCloseDB() 
{
	if(m_pConnectionPtr != NULL)
	{
		if(m_pConnectionPtr->State)
		{
			m_pConnectionPtr->Close();
			m_pConnectionPtr=NULL;
			CAddRecord m_addrecord;
			m_addrecord.SetConnectionPtr(m_pConnectionPtr);
		}
	}
}

void CMainFrame::OnBackupDB()  
{
	CBackupRestoreDB  backupdb;
 	if( backupdb.DoModal() != IDOK)
		return;
 
	OnCloseDB();

	_ConnectionPtr pConnectionPtr;

	try
	{
 		
		pConnectionPtr.CreateInstance(__uuidof(Connection));

		CString strsql;
		strsql.Format("driver={SQL Server};Server=127.0.0.1;DATABASE=master;UID=%s;PWD=%s;", \
			backupdb.GetUsername(), backupdb.GetPassword());

		pConnectionPtr->Open((_bstr_t)strsql, "", "", adModeUnknown);

  		strsql.Format("backup database %s to disk= '%s'", 
			backupdb.GetDatabasename(), backupdb.GetPathname());
 		pConnectionPtr->Execute((_bstr_t)strsql, NULL, adCmdText);
	}
	catch(_com_error e)
	{
		AfxMessageBox((CString)e.ErrorMessage() + " 备份数据库失败.");
		return;
	}

	pConnectionPtr->Close();
	AfxMessageBox("备份数据库成功.", MB_OK | MB_ICONINFORMATION);
}

void CMainFrame::OnRestoreDB() 
{
	CBackupRestoreDB  restoredb;
	restoredb.SetDialogFlag(false);
	if( restoredb.DoModal() != IDOK)
		return;

	OnCloseDB();

	_ConnectionPtr pConnectionPtr;

	try
	{
		pConnectionPtr.CreateInstance(__uuidof(Connection));

		CString strsql;
		strsql.Format("driver={SQL Server};Server=127.0.0.1;DATABASE=master;UID=%s;PWD=%s;", \
			restoredb.GetUsername(), restoredb.GetPassword());

		pConnectionPtr->Open((_bstr_t)strsql, "", "", adModeUnknown);

  		strsql.Format("restore database %s from disk= '%s'", restoredb.GetDatabasename(), restoredb.GetPathname());
 		pConnectionPtr->Execute((_bstr_t)strsql, NULL, adCmdText);
	}
	catch(_com_error e)
	{
		AfxMessageBox((CString)e.ErrorMessage() + " 恢复数据库失败.");
		return;
	}

	pConnectionPtr->Close();
	AfxMessageBox("恢复数据库成功.", MB_OK | MB_ICONINFORMATION);
}

void CMainFrame::OnUsermanage() 
{
	CUserManage m_Usermanage;
	m_Usermanage.DoModal();    		
}

void CMainFrame::OnSongManage() 
{
	CSongManage m_Songmanage;
	m_Songmanage.DoModal();
}
//菜单操作结束

⌨️ 快捷键说明

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