?? mainfrm.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() + " 連接數(shù)據(jù)庫失敗.");
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() + " 備份數(shù)據(jù)庫失敗.");
return;
}
pConnectionPtr->Close();
AfxMessageBox("備份數(shù)據(jù)庫成功.", 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() + " 恢復(fù)數(shù)據(jù)庫失敗.");
return;
}
pConnectionPtr->Close();
AfxMessageBox("恢復(fù)數(shù)據(jù)庫成功.", MB_OK | MB_ICONINFORMATION);
}
void CMainFrame::OnUsermanage()
{
CUserManage m_Usermanage;
m_Usermanage.DoModal();
}
void CMainFrame::OnSongManage()
{
CSongManage m_Songmanage;
m_Songmanage.DoModal();
}
//菜單操作結(jié)束
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -