📄 ewordview.cpp
字号:
// EWordView.cpp : implementation of the CEWordView class
//
#include <afxwin.h>
#include "stdafx.h"
#include "EWord.h"
#include "afx.h"
#include "EWordSet.h"
#include "EWordDoc.h"
#include "EWordView.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "Studydlg.h"
#include "Reviewdlg.h"
#include "OptionDlg.h"
/////////////////////////////////////////////////////////////////////////////
// CEWordView
IMPLEMENT_DYNCREATE(CEWordView, CDaoRecordView)
BEGIN_MESSAGE_MAP(CEWordView, CDaoRecordView)
//{{AFX_MSG_MAP(CEWordView)
ON_COMMAND(ID_RECORD_ADD, OnRecordAdd)
ON_EN_CHANGE(IDC_MEANS, OnChangeMeans)
ON_COMMAND(ID_RECORD_DELETE, OnRecordDelete)
ON_WM_LBUTTONDBLCLK()
ON_COMMAND(ID_WORD_STUDY, OnWordStudy)
ON_COMMAND(ID_WORD_REVIEW, OnWordReview)
ON_COMMAND(IDC_OPTION, OnOption)
ON_BN_CLICKED(IDC_ADD_OK, OnAddOk)
ON_WM_RBUTTONDOWN()
ON_EN_CHANGE(IDC_WORD, OnChangeWord)
ON_BN_CLICKED(IDC_ADD_CANCEL, OnAddCancel)
ON_COMMAND(ID_HELP, OnHelp)
ON_COMMAND(ID_ADD_WORD,JSAddWord)
ON_COMMAND(ID_SHOWMINAL,ShowSmall)
ON_WM_TIMER()
ON_WM_CREATE()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CDaoRecordView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CDaoRecordView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CDaoRecordView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEWordView construction/destruction
CEWordView::CEWordView()
: CDaoRecordView(CEWordView::IDD)
{
//{{AFX_DATA_INIT(CEWordView)
m_pSet = NULL;
m_Meaning = _T("");
m_Spell = _T("");
//}}AFX_DATA_INIT
// TODO: add construction code here
m_bAdding=FALSE;
CFile File;
if(File.Open("Option.sav",CFile::modeRead))
{
File.Read(&Option,sizeof(Option));
}
else
{
OptionInit();
}
}
CEWordView::~CEWordView()
{
}
void CEWordView::DoDataExchange(CDataExchange* pDX)
{
CDaoRecordView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CEWordView)
DDX_Text(pDX, IDC_MEANS, m_Meaning);
DDX_Text(pDX, IDC_WORD, m_Spell);
//}}AFX_DATA_MAP
}
BOOL CEWordView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CDaoRecordView::PreCreateWindow(cs);
}
void CEWordView::OnInitialUpdate()
{
m_pSet = &GetDocument()->m_eWordSet;
CDaoRecordView::OnInitialUpdate();
}
/////////////////////////////////////////////////////////////////////////////
// CEWordView printing
BOOL CEWordView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CEWordView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CEWordView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CEWordView diagnostics
#ifdef _DEBUG
void CEWordView::AssertValid() const
{
CDaoRecordView::AssertValid();
}
void CEWordView::Dump(CDumpContext& dc) const
{
CDaoRecordView::Dump(dc);
}
CEWordDoc* CEWordView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CEWordDoc)));
return (CEWordDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CEWordView database support
CDaoRecordset* CEWordView::OnGetRecordset()
{
return m_pSet;
}
/////////////////////////////////////////////////////////////////////////////
// CEWordView message handlers
void CEWordView::OnRecordAdd()
{
// TODO: Add your command handler code here
// m_pSet->AddNew();
m_bAdding = TRUE;
CButton *pb=(CButton*)GetDlgItem(IDC_ADD_OK);
pb->ShowWindow(SW_SHOW);
//pb->SetReadOnly(FALSE);
pb=(CButton*)GetDlgItem(IDC_ADD_CANCEL);
pb->ShowWindow(SW_SHOW);
// pb->SetReadOnly(FALSE);
CEdit* pCtrl = (CEdit*)GetDlgItem(IDC_WORD);
pCtrl->SetReadOnly(FALSE);
pCtrl->SetWindowText("");
pCtrl = (CEdit*)GetDlgItem(IDC_MEANS);
pCtrl->SetReadOnly(FALSE);
//UpdateData(FALSE);
pCtrl->SetWindowText("");
}
BOOL CEWordView::OnMove(UINT nIDMoveCommand)
{
// TODO: Add your specialized code here and/or call the base class
if (m_bAdding)
{
CEdit *pCtrl=(CEdit*)GetDlgItem(IDC_WORD);
CString s;
pCtrl->GetWindowText(s);
if(s.GetLength()<1)
return(FALSE);
pCtrl=(CEdit*)GetDlgItem(IDC_MEANS);
pCtrl->GetWindowText(s);
if(s.GetLength()<1)
return(FALSE);
m_bAdding = FALSE;
UpdateData(TRUE);
m_pSet->m_column4=0;
m_pSet->m_column5=0;
COleDateTime time;
time=time.GetCurrentTime();
m_pSet->m_column3=time;
if (m_pSet->CanUpdate())
m_pSet->Update();
m_pSet->Requery();
UpdateData(FALSE);
pCtrl = (CEdit*)GetDlgItem(IDC_WORD);
pCtrl->SetReadOnly(TRUE);
pCtrl = (CEdit*)GetDlgItem(IDC_MEANS);
pCtrl->SetReadOnly(TRUE);
return TRUE;
}
else
if(CDaoRecordView::OnMove(nIDMoveCommand))
{
m_Spell=m_pSet->m_column1;
m_Meaning=m_pSet->m_column2;
UpdateData(FALSE);
return(TRUE);
}
else return(FALSE);
}
void CEWordView::OnChangeMeans()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CRecordView::OnInitDialog()
// function to send the EM_SETEVENTMASK message to the control
// with the ENM_CHANGE flag ORed into the lParam mask.
// TODO: Add your control notification handler code here
if(!m_bAdding)return;
CEdit* pNewWord = (CEdit*)GetDlgItem(IDC_MEANS);
CString m_NewWord;
pNewWord->GetWindowText(m_NewWord);
int i=m_NewWord.Find(':');
if(i>2)
{
m_Spell=m_NewWord.Left(i-1);
//CEdit * pWord=(CEdit*)GetDlgItem(IDC_WORD);
//pWord->SetWindowText(m_Word);
int j;
j=m_NewWord.GetLength();
if(i>2&&j>4)
{
m_Meaning=m_NewWord.Right(j-i-2);
//CEdit * pMeans=(CEdit*)GetDlgItem(IDC_MEANS);
//pMeans->SetWindowText(m_Means);
}
UpdateData(FALSE);
}
}
void CEWordView::OnRecordDelete()
{
// TODO: Add your command handler code here
if(m_pSet->m_column1=="Chenshengli"|m_pSet->m_column1=="EWord2000")
{
MessageBox("不能删除该数据");
return;
}
m_pSet->Delete();
m_pSet->MoveNext();
if (m_pSet->IsEOF())
m_pSet->MoveLast();
if (m_pSet->IsBOF())
m_pSet->SetFieldNull(NULL);
m_Spell=m_pSet->m_column1;
m_Meaning=m_pSet->m_column2;
UpdateData(FALSE);
}
void CEWordView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
// PostMessage(ID_RECORD_ADD,0,0);
OnRecordAdd();
CDaoRecordView::OnLButtonDblClk(nFlags, point);
}
void CEWordView::OnWordStudy()
{
// TODO: Add your command handler code here
CStudyDlg dlg(m_pSet);
dlg.StudyNumber=Option.StudyNumber;
if(dlg.DoModal()==IDOK)
{
}
else
{
}
}
void CEWordView::OnWordReview()
{
// TODO: Add your command handler code here
CReviewDlg dlg(Option,m_pSet);
if(dlg.DoModal()==IDOK)
{
}
}
void CEWordView::OnOption()
{
// TODO: Add your command handler code here
COptionDlg dlg(Option);
if(dlg.DoModal()==IDOK)
{
Option=dlg.Option;
CFile File;
if(File.Open("Option.sav",CFile::modeCreate|CFile::modeWrite))
{
File.Write(&Option,sizeof(Option));
}
}
}
void CEWordView::OptionInit()
{
Option.StudyNumber=20;
Option.ReviewNumber=20;
Option.Day1=1;
Option.Day2=2;
Option.Day3=4;
Option.Day4=8;
Option.Day5=16;
}
BOOL CEWordView::OnAddOk()
{
// TODO: Add your control notification handler code here
BOOL IsNewWord=TRUE;
m_bAdding = FALSE;
CButton *pb=(CButton*)GetDlgItem(IDC_ADD_OK);
pb->ShowWindow(SW_HIDE);
//pb->SetReadOnly(FALSE);
pb=(CButton*)GetDlgItem(IDC_ADD_CANCEL);
pb->ShowWindow(SW_HIDE);
CEdit* pCtrl = (CEdit*)GetDlgItem(IDC_WORD);
int result = pCtrl->SetReadOnly(TRUE);
pCtrl = (CEdit*)GetDlgItem(IDC_MEANS);
pCtrl->SetReadOnly(TRUE);
UpdateData(TRUE);
m_pSet->MoveFirst();
while(!m_pSet->IsEOF()&&IsNewWord)
{
if(m_pSet->m_column1==m_Spell)
IsNewWord=FALSE;
m_pSet->MoveNext();
};
if((!IsNewWord)|(m_Spell.GetLength()<1))
{
m_pSet->MoveFirst();
MessageBox("该单词已存在或错误,不能加入词库");
return FALSE;
}
m_pSet->AddNew();
m_pSet->m_column1=m_Spell;
m_pSet->m_column2=m_Meaning;
m_pSet->m_column4=0;
m_pSet->m_column5=0;
COleDateTime time;
time=time.GetCurrentTime();
m_pSet->m_column3=time;
if (m_pSet->CanUpdate())
m_pSet->Update();
m_pSet->Requery();
while(!m_pSet->IsEOF())
{
if(m_pSet->m_column1==m_Spell)
break;
m_pSet->MoveNext();
};
return (TRUE);
}
void CEWordView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CMenu Menu;
Menu.LoadMenu(IDR_ADDMENU);
pMenu=Menu.GetSubMenu(0);
ASSERT(pMenu!=0);
CPoint p=point;
ClientToScreen(&p);
pMenu->TrackPopupMenu(0,p.x,p.y,this);
CDaoRecordView::OnRButtonDown(nFlags, point);
}
void CEWordView::OnChangeWord()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDaoRecordView::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
if(!m_bAdding)return;
//CButton* pb=(CButton*)GetDlgItem(IDC_ADD_OK);
//pb->EnableWindow(FALSE);
CEdit* pNewWord = (CEdit*)GetDlgItem(IDC_WORD);
CString m_NewWord;
pNewWord->GetWindowText(m_NewWord);
/*
if(m_NewWord.GetLength()>0)
{
pb->EnableWindow(TRUE);
}
*/
int i=m_NewWord.Find(':');
if(i>2)
{
m_Spell=m_NewWord.Left(i-1);
//CEdit * pWord=(CEdit*)GetDlgItem(IDC_WORD);
//pWord->SetWindowText(m_Word);
int j;
j=m_NewWord.GetLength();
if(i>2&&j>4)
{
m_Meaning=m_NewWord.Right(j-i-2);
//CEdit * pMeans=(CEdit*)GetDlgItem(IDC_MEANS);
//pMeans->SetWindowText(m_Means);
i=m_NewWord.ReverseFind('/');
if(i>4)
m_Meaning=m_NewWord.Right(j-i-1);
}
UpdateData(FALSE);
}
}
void CEWordView::OnAddCancel()
{
// TODO: Add your control notification handler code here
m_bAdding = FALSE;
CButton *pb=(CButton*)GetDlgItem(IDC_ADD_OK);
pb->ShowWindow(SW_HIDE);
//pb->SetReadOnly(FALSE);
pb=(CButton*)GetDlgItem(IDC_ADD_CANCEL);
pb->ShowWindow(SW_HIDE);
CEdit* pCtrl = (CEdit*)GetDlgItem(IDC_WORD);
int result = pCtrl->SetReadOnly(TRUE);
pCtrl = (CEdit*)GetDlgItem(IDC_MEANS);
pCtrl->SetReadOnly(TRUE);
m_Spell=m_pSet->m_column1;
m_Meaning=m_pSet->m_column2;
UpdateData(FALSE);
}
void CEWordView::OnHelp()
{
CString parth;
CFile cFile;
CString temp="eword2000.html";
if(cFile.Open(temp,CFile::modeRead))
{
parth=cFile.GetFilePath();
parth=parth.Left(parth.GetLength()-temp.GetLength());
ShellExecute(::GetDesktopWindow(),"open","eword2000.html",
NULL,parth,SW_SHOW );
// SW_SHOWMAXIMIZED );
}
}
void CEWordView::JSAddWord()
{
// CMainFrame::OnAddWord();
char *s;
CString string;
if(OpenClipboard())
if(IsClipboardFormatAvailable (CF_TEXT))
{
HANDLE handle=GetClipboardData(CF_TEXT);
s=(char*)handle;
string=s;
}
CloseClipboard();
int i=string.Find(" ");
int j=string.Find(":");
if(i<2&&j!=(i-1)){
MessageBox("没有选定要加入的单词");
}
else
{
{
if(string.GetLength()>100)
string=string.Left(100);
OnRecordAdd();
m_Spell=string;
UpdateData(FALSE);
OnChangeWord();
}
CMainFrame * cwnd;
cwnd=(CMainFrame*)GetParent();
if(!cwnd->IsWindowVisible( ))
cwnd->OnAddWord();
}
}
void CEWordView::ShowSmall ()
{
CMainFrame * cwnd;
cwnd=(CMainFrame*)GetParent();
cwnd->ShowWindow(SW_HIDE);
}
void CEWordView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
char *s;
CString string;
if(OpenClipboard()){
if(IsClipboardFormatAvailable (CF_TEXT))
{
HANDLE handle=GetClipboardData(CF_TEXT);
s=(char*)handle;
string=s;
}
CloseClipboard();
int i=string.Find(" ");
int j=string.Find(":");
if(i>2&&j==(i+1)&&m_TempString!=string)
{
m_TempString=string;
JSAddWord();
}
}
CDaoRecordView::OnTimer(nIDEvent);
}
int CEWordView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDaoRecordView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
SetTimer(0,1000,NULL);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -