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

📄 winbdcdlg.cpp

📁 用VC开发的背单词小软件
💻 CPP
字号:
// WinBDCDlg.cpp : implementation file
//

#include "stdafx.h"
#include "WinBDC.h"
#include "WinBDCDlg.h"
#include "ReviewDlg.h"
#include "LoginDlg.h"
#include "UserManageDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

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)
	virtual BOOL OnInitDialog();
	//}}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
}

BOOL CAboutDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	SetDlgItemText(IDC_STATIC1, "作者:符宇同\nFYT Studio\nsuperfyt@163.com");
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CWinBDCDlg dialog

CWinBDCDlg::CWinBDCDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CWinBDCDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CWinBDCDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDI_HAMBURGER);
}

void CWinBDCDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CWinBDCDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CWinBDCDlg, CDialog)
	//{{AFX_MSG_MAP(CWinBDCDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_COMMAND(ID_HELP_ABOUT, OnHelpAbout)
	ON_COMMAND(ID_FILE_EXIT, OnFileExit)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_COMMAND(ID_EDIT_REVIEW, OnEditReview)
	ON_COMMAND(ID_FILE_CLOSE, OnFileClose)
	ON_COMMAND(ID_EDIT_BEGIN, OnEditBegin)
	ON_BN_CLICKED(IDC_SPELLOK, OnSpellok)
	ON_COMMAND(ID_EDIT_MANAGEDB, OnEditManagedb)
	ON_COMMAND(ID_EDIT_MANAGEUSER, OnEditManageuser)
	ON_WM_CLOSE()
	ON_WM_CANCELMODE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CWinBDCDlg message handlers

BOOL CWinBDCDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	// TODO: Add extra initialization here

	m_pRichEditCtrl = (CRichEditCtrl *)GetDlgItem(IDC_RICHEDIT1);
	m_pEdit = (CEdit *)GetDlgItem(IDC_EDIT1);
	m_pButton = (CButton *)GetDlgItem(IDC_SPELLOK);
	m_pStaticSpellResult = (CStatic *)GetDlgItem(IDC_SPELLRESULT);
	m_pStaticSum = (CStatic *)GetDlgItem(IDC_STATIC1);
	m_pStaticYet = (CStatic *)GetDlgItem(IDC_STATIC2);
	m_pStaticRight = (CStatic *)GetDlgItem(IDC_STATIC3);
	m_pMenu = GetMenu();

	m_pMenu->EnableMenuItem(ID_FILE_CLOSE, MF_GRAYED|MF_BYCOMMAND);
	m_pMenu->EnableMenuItem(ID_EDIT_REVIEW, MF_GRAYED|MF_BYCOMMAND);
	m_pMenu->EnableMenuItem(ID_EDIT_BEGIN, MF_GRAYED|MF_BYCOMMAND);
	m_pMenu->EnableMenuItem(ID_EDIT_MANAGEDB, MF_GRAYED|MF_BYCOMMAND);
	m_pButton->EnableWindow(false);

	m_UserList.RemoveAll();

	CLoginDlg dlg;
	int nCmd = dlg.DoModal();

	if(nCmd == IDOK)
	{
		for(int i = 0; i<m_UserList.GetCount(); i++)
		{
			m_pUser = m_UserList.GetAt(m_UserList.FindIndex(i));
			if(m_pUser->m_bIsMe == true)
			{
				MessageBox((LPCTSTR)m_pUser->m_Group);
				break;
			}
		}
	}
	if(nCmd == IDCANCEL)
	{
		EndDialog(1);
	}
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CWinBDCDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	CDialog::OnSysCommand(nID, lParam);
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CWinBDCDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		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;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CWinBDCDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CWinBDCDlg::OnHelpAbout() 
{
	// TODO: Add your command handler code here
	CAboutDlg dlgAbout;
	dlgAbout.DoModal();
}

void CWinBDCDlg::OnFileExit() 
{
	// TODO: Add your command handler code here
	OnClose();
	this->EndDialog(1);
}

void CWinBDCDlg::OnFileOpen() 
{
	// TODO: Add your command handler code here
	static OPENFILENAME file;
	char EXEDirectory[100];
	CFileDialog OpenDlg(true);

	memset(EXEDirectory, 0, 100);
	GetCurrentDirectory(100,EXEDirectory);
	OpenDlg.m_ofn.lpstrInitialDir = EXEDirectory;
	OpenDlg.m_ofn.lpstrDefExt = "wrf";
	OpenDlg.m_ofn.lpstrFilter = "词库文件(*.wfr)\0*.wfr\0所有文件(*.*)\0*.*\0\0";

	if(OpenDlg.DoModal() == IDOK)
	{
		int nCount = 0;
		m_FilePath.Format("%s", OpenDlg.m_ofn.lpstrFile);
		FILE *fp = fopen(OpenDlg.m_ofn.lpstrFile, "r");
		char szTempInt[100], szTempEng[100], szTempChs[100];
		CString str;

		fgets(szTempInt, 100, fp);
		nCount = atoi(szTempInt);

		CMyWord *word;

		for(int i = 0; i<nCount; i++)
		{
			fgets(szTempEng, 100, fp);
			fgets(szTempChs, 100, fp);
			word = new CMyWord(szTempEng, szTempChs);
			m_WordList.AddTail(word);
		}

		fclose(fp);

		m_pMenu->EnableMenuItem(ID_FILE_OPEN, MF_GRAYED|MF_BYCOMMAND);
		m_pMenu->EnableMenuItem(ID_FILE_CLOSE, MF_ENABLED|MF_BYCOMMAND);
		m_pMenu->EnableMenuItem(ID_EDIT_REVIEW, MF_ENABLED|MF_BYCOMMAND);
		m_pMenu->EnableMenuItem(ID_EDIT_BEGIN, MF_ENABLED|MF_BYCOMMAND);
		m_pMenu->EnableMenuItem(ID_EDIT_MANAGEDB, MF_ENABLED|MF_BYCOMMAND);

		str.Format("%d", m_WordList.GetCount());
		this->m_pStaticSum->SetWindowText((LPCTSTR)str);
	}
}

void CWinBDCDlg::OnEditReview() 
{
	// TODO: Add your command handler code here
	CReviewDlg dlg;
	dlg.DoModal();
}

void CWinBDCDlg::OnFileClose() 
{
	// TODO: Add your command handler code here
	m_WordList.RemoveAll();
	this->m_pButton->EnableWindow(false);
	this->m_pEdit->SetWindowText("");
	this->m_pRichEditCtrl->SetWindowText("");
	this->m_pStaticRight->SetWindowText("");
	this->m_pStaticSpellResult->SetWindowText("");
	this->m_pStaticSum->SetWindowText("");
	this->m_pStaticYet->SetWindowText("");
	m_pMenu->EnableMenuItem(ID_FILE_OPEN, MF_ENABLED|MF_BYCOMMAND);
	m_pMenu->EnableMenuItem(ID_FILE_CLOSE, MF_GRAYED|MF_BYCOMMAND);
	m_pMenu->EnableMenuItem(ID_EDIT_REVIEW, MF_GRAYED|MF_BYCOMMAND);
	m_pMenu->EnableMenuItem(ID_EDIT_BEGIN, MF_GRAYED|MF_BYCOMMAND);
	m_pMenu->EnableMenuItem(ID_EDIT_MANAGEDB, MF_GRAYED|MF_BYCOMMAND);
}

void CWinBDCDlg::OnEditBegin() 
{
	// TODO: Add your command handler code here
	int nCmd = MessageBox("即将开始单词测验,您确定全复习好了吗?", "准备测验", MB_OKCANCEL|MB_ICONQUESTION);
	if(nCmd == IDOK)
	{
		m_pMenu->EnableMenuItem(ID_EDIT_REVIEW, MF_GRAYED|MF_BYCOMMAND);
		m_pMenu->EnableMenuItem(ID_EDIT_BEGIN, MF_GRAYED|MF_BYCOMMAND);
		srand( (unsigned)time( NULL ) );
		int nSerial = rand() % m_WordList.GetCount();
		m_pMyWord = m_WordList.GetAt(m_WordList.FindIndex(nSerial));
		m_pRichEditCtrl->SetWindowText((LPCTSTR)m_pMyWord->GetFormatChinese());
		m_pMyWord->m_bIsAppeared = true;
		m_pEdit->SetFocus();
		m_pStaticYet->SetWindowText("1");
		m_pButton->EnableWindow(true);
	}
}

void CWinBDCDlg::OnSpellok() 
{
	// TODO: Add your control notification handler code here
	CString str;
	m_pEdit->GetWindowText(str);
	if(m_pMyWord->m_English == str)
	{
		this->m_pStaticSpellResult->SetWindowText("拼写正确!");
		m_pStaticRight->GetWindowText(str);
		str.Format("%d", atoi((LPCTSTR)str)+1);
		m_pStaticRight->SetWindowText((LPCTSTR)str);
	}
	else
	{
		this->m_pStaticSpellResult->SetWindowText((LPCTSTR)m_pMyWord->m_English);
	}
	m_pStaticYet->GetWindowText(str);
	if(atoi((LPCTSTR)str) < m_WordList.GetCount())
	{
		str.Format("%d", atoi((LPCTSTR)str)+1);
		m_pStaticYet->SetWindowText((LPCTSTR)str);
		srand( (unsigned)time( NULL ) );
		int nSerial = 0;
		do
		{
			nSerial = rand() % m_WordList.GetCount();
			m_pMyWord = m_WordList.GetAt(m_WordList.FindIndex(nSerial));
		}while(m_pMyWord->m_bIsAppeared == true);
		m_pRichEditCtrl->SetWindowText((LPCTSTR)m_pMyWord->GetFormatChinese());
		m_pMyWord->m_bIsAppeared = true;
		m_pEdit->SetWindowText("");
		m_pEdit->SetFocus();
	}
	else
	{
		this->m_pEdit->SetWindowText("");
		m_pButton->EnableWindow(false);
		CString temp1, temp2;
		int sum = 0, right = 0;
		temp1.Format("单词总数: %d", m_WordList.GetCount());
		temp1 += "\r\n";
		temp1 += "正确次数: ";
		GetDlgItemText(IDC_STATIC3, temp2);
		temp1 += temp2;
		temp1 += "\r\n";
		temp1 += "正 确 率: ";
		right = atoi(temp2);
		sum = m_WordList.GetCount();
		temp2.Format("%.2f%%", (float)right*100.0/(float)sum);
		temp1 += temp2;
		MessageBox(temp1, "测试完毕");
	}
}

BOOL CWinBDCDlg::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	if (pMsg->message == WM_KEYDOWN) 
	{
		if(pMsg->wParam==VK_RETURN)
		{
			CWnd *pWnd = this->GetDlgItem(IDC_EDIT1);
			if(pMsg->hwnd == pWnd->m_hWnd && m_pButton->IsWindowEnabled())
				OnSpellok();
		}
	}
	return CDialog::PreTranslateMessage(pMsg);
}

void CWinBDCDlg::OnEditManagedb() 
{
	// TODO: Add your command handler code here
	if(m_pUser->m_Group.Compare("Administrator") == 0)
	{
		CReviewDlg dlg;
		dlg.m_bIsManagement = true;
		dlg.DoModal();
	}
	else
		MessageBox("只有Administrator才能进行词库管理!");
}

void CWinBDCDlg::OnEditManageuser() 
{
	// TODO: Add your command handler code here
	CUserManageDlg dlg;
	dlg.DoModal();
}

void CWinBDCDlg::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	
	char EXEDirectory[100];
	memset(EXEDirectory, 0, 100);
	GetCurrentDirectory(100,EXEDirectory);
	strcat(EXEDirectory, "\\User.inf");
	FILE *fp = fopen(EXEDirectory, "w");

	for(int i=0; i<m_UserList.GetCount(); i++)
	{
		m_pUser = m_UserList.GetAt(m_UserList.FindIndex(i));
		fprintf(fp, "%s\n%s\n%s", m_pUser->m_UserName, m_pUser->m_PassWord, m_pUser->m_Group);
		if(i+1 < m_UserList.GetCount())
			fprintf(fp, "\n");
	}
	fclose(fp);

	CDialog::OnClose();
}

void CWinBDCDlg::OnCancelMode() 
{
	CDialog::OnCancelMode();
	
	// TODO: Add your message handler code here
	
}

⌨️ 快捷键说明

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