📄 magicworddlg.cpp
字号:
_T( "删除确认?" ), MB_OKCANCEL | MB_ICONQUESTION ) == IDOK )
{
m_pSet->Delete();
MessageBox( _T( "该单词信息已经被成功删除!" ),
_T( "删除成功!" ), MB_OK | MB_ICONASTERISK );
OnNext();
}
}
catch( CDaoException *exception )
{
exception->ReportError();
m_pSet->MoveNext();
m_pSet->MovePrev();
return;
}
}
/////////////////////////////////////////////////////////////////////////////
// 修改单词信息
void CMagicWordDlg::OnModify()
{
CWordInfoDlg WordInfoDlg;
WordInfoDlg.m_windowTitle = _T( "修改单词信息" );
WordInfoDlg.m_word = m_pSet->m_Word;
WordInfoDlg.m_explain0 = m_pSet->m_Explain0;
WordInfoDlg.m_explain1 = m_pSet->m_Explain1;
WordInfoDlg.m_explain2 = m_pSet->m_Explain2;
WordInfoDlg.m_phrase0 = m_pSet->m_Phrase0;
WordInfoDlg.m_phrase1 = m_pSet->m_Phrase1;
WordInfoDlg.m_phrase2 = m_pSet->m_Phrase2;
WordInfoDlg.m_sentence0 = m_pSet->m_Sentence0;
WordInfoDlg.m_sentence1 = m_pSet->m_Sentence1;
if ( WordInfoDlg.DoModal() != IDOK )
return;
try
{
m_pSet->Edit();
m_pSet->m_Word = WordInfoDlg.m_word;
m_pSet->m_Explain0 = WordInfoDlg.m_explain0;
m_pSet->m_Explain1 = WordInfoDlg.m_explain1;
m_pSet->m_Explain2 = WordInfoDlg.m_explain2;
m_pSet->m_Phrase0 = WordInfoDlg.m_phrase0;
m_pSet->m_Phrase1 = WordInfoDlg.m_phrase1;
m_pSet->m_Phrase2 = WordInfoDlg.m_phrase2;
m_pSet->m_Sentence0 = WordInfoDlg.m_sentence0;
m_pSet->m_Sentence1 = WordInfoDlg.m_sentence1;
if ( m_pSet->CanUpdate() )
{
m_pSet->Update();
PublicAssign();
}
}
catch( CDaoException *exception )
{
exception->ReportError();
m_pSet->MoveNext();
m_pSet->MovePrev();
return;
}
}
/////////////////////////////////////////////////////////////////////////////
// 查找单词
void CMagicWordDlg::OnSearch()
{
CWordInfoDlg WordInfoDlg;
CSearchDlg SearchDlg;
CWordDaoSet TempSet;
CString strSQL;
if ( SearchDlg.DoModal() != IDOK )
return;
if ( TempSet.IsOpen() )
TempSet.Close();
// 先用SELECT word老出错,为什么用*就是对得呢?
strSQL.Format( "SELECT * FROM WordList WHERE word = '%s'",
SearchDlg.m_word.operator LPCTSTR() );
TempSet.Open( AFX_DAO_USE_DEFAULT_TYPE, strSQL, 0 );
if ( !TempSet.IsEOF() )
{
WordInfoDlg.m_windowTitle = _T( "显示查询单词信息" );
// 窗口还没显示就设置标题,怪不得老在这儿非法操作
// 在DoModal之前会调用OnInitDialog,在这儿已经处理了下面的操作
//WordInfoDlg.SetWindowText( WordInfoDlg.m_windowTitle );
WordInfoDlg.m_word = TempSet.m_Word;
WordInfoDlg.m_explain0 = TempSet.m_Explain0;
WordInfoDlg.m_explain1 = TempSet.m_Explain1;
WordInfoDlg.m_explain2 = TempSet.m_Explain2;
WordInfoDlg.m_phrase0 = TempSet.m_Phrase0;
WordInfoDlg.m_phrase1 = TempSet.m_Phrase1;
WordInfoDlg.m_phrase2 = TempSet.m_Phrase2;
WordInfoDlg.m_sentence0 = TempSet.m_Sentence0;
WordInfoDlg.m_sentence1 = TempSet.m_Sentence1;
WordInfoDlg.DoModal();
}
else
{
MessageBox( _T( "单词库中没有这个单词!" ),
_T( "查询失败!" ), MB_OK | MB_ICONASTERISK );
return;
}
if ( TempSet.IsOpen() )
TempSet.Close();
}
/////////////////////////////////////////////////////////////////////////////
// 关于程序
void CMagicWordDlg::OnAbout()
{
CAboutDlg AboutDlg;
AboutDlg.DoModal();
}
/////////////////////////////////////////////////////////////////////////////
// 显示下一个单词信息
void CMagicWordDlg::OnNext()
{
try
{
m_pSet->MoveNext();
if ( m_pSet->IsEOF() )
m_pSet->MoveFirst();
PublicAssign();
}
catch( CDaoException *exception )
{
exception->ReportError();
m_pSet->MovePrev();
return;
}
}
/////////////////////////////////////////////////////////////////////////////
// 显示上一个单词信息
void CMagicWordDlg::OnPrevious()
{
try
{
m_pSet->MovePrev();
if ( m_pSet->IsBOF() )
m_pSet->MoveLast();
PublicAssign();
}
catch( CDaoException *exception )
{
exception->ReportError();
m_pSet->MoveNext();
return;
}
}
/////////////////////////////////////////////////////////////////////////////
// 显示最后一个单词信息
void CMagicWordDlg::OnEnd()
{
try
{
m_pSet->MoveLast();
PublicAssign();
}
catch( CDaoException *exception )
{
exception->ReportError();
m_pSet->MoveNext();
m_pSet->MovePrev();
return;
}
}
/////////////////////////////////////////////////////////////////////////////
// 显示最后一个单词信息
void CMagicWordDlg::OnHome()
{
try
{
m_pSet->MoveFirst();
PublicAssign();
}
catch( CDaoException *exception )
{
exception->ReportError();
m_pSet->MoveNext();
m_pSet->MovePrev();
return;
}
}
/////////////////////////////////////////////////////////////////////////////
// 跳转到上次退出时的记录
void CMagicWordDlg::OnJump()
{
HKEY hKey = 0;
BYTE szBuffer[26] = { '\0' };
DWORD dwType = REG_SZ;
DWORD dwSize = 27;
memset( szBuffer, 0, dwSize );
// 如果打开注册表成功,获取键值并实现跳转。
if ( RegOpenKeyEx( HKEY_CURRENT_USER, "SOFTWARE\\MagicWord",
NULL, KEY_ALL_ACCESS, &hKey ) == ERROR_SUCCESS )
{
if ( RegQueryValueEx( hKey, "CurrentWord", NULL, &dwType, szBuffer, &dwSize ) == ERROR_SUCCESS )
{
CWordDaoSet TempSet;
CString strSQL;
if ( TempSet.IsOpen() )
TempSet.Close();
strSQL.Format( "SELECT * from WordList WHERE word = '%s'", szBuffer );
TempSet.Open( AFX_DAO_USE_DEFAULT_TYPE, strSQL, 0 );
// 没有找到则不移动m_pSet,保证了OnNext/OnModify()等可以正常操作
if ( TempSet.IsEOF() )
{
MessageBox( _T( "单词库中没有这个单词!" ),
_T( "跳转失败!" ), MB_OK | MB_ICONASTERISK );
return;
}
}
}
// 找到的话,则m_pSet跳转到该处。
m_pSet->MoveFirst();
while ( !m_pSet->IsEOF() )
{
if ( m_pSet->m_Word == szBuffer )
{
PublicAssign();
break;
}
m_pSet->MoveNext();
}
}
/////////////////////////////////////////////////////////////////////////////
// 跳转到当前指定的单词
void CMagicWordDlg::OnGoto()
{
CWordDaoSet TempSet;
CString strSQL;
UpdateData();
if ( m_goto.IsEmpty() )
{
MessageBox( _T( "怎么能不输入单词呢?" ),
_T( "请输入单词!" ), MB_OK | MB_ICONASTERISK );
return;
}
// 首先用CWordDaoSet临时对象作查询
if ( TempSet.IsOpen() )
TempSet.Close();
strSQL.Format( "SELECT * from WordList WHERE word = '%s'", m_goto.operator LPCTSTR() );
TempSet.Open( AFX_DAO_USE_DEFAULT_TYPE, strSQL, 0 );
// 没有找到则不移动m_pSet,保证了OnNext()等可以正常操作
if ( TempSet.IsEOF() )
{
MessageBox( _T( "单词库中没有这个单词!" ),
_T( "跳转失败!" ), MB_OK | MB_ICONASTERISK );
return;
}
// 找到的话,则m_pSet跳转到该处。
m_pSet->MoveFirst();
while ( !m_pSet->IsEOF() )
{
if ( !m_pSet->m_Word.CompareNoCase( m_goto ) )
{
PublicAssign();
break;
}
m_pSet->MoveNext();
}
// 清空m_goto对象
m_goto.Empty();
}
/////////////////////////////////////////////////////////////////////////////
// 显示上次退出时注册的单词
void CMagicWordDlg::HistroyVisitWord()
{
HKEY hKey = 0;
BYTE szBuffer[26] = { '\0' };
DWORD dwType = REG_SZ;
DWORD dwSize = 27;
memset( szBuffer, 0, dwSize );
if ( RegOpenKeyEx( HKEY_CURRENT_USER, "SOFTWARE\\MagicWord",
NULL, KEY_ALL_ACCESS, &hKey ) == ERROR_SUCCESS )
{
if ( RegQueryValueEx( hKey, "CurrentWord", NULL, &dwType, szBuffer, &dwSize ) == ERROR_SUCCESS )
m_jump = szBuffer;
}
}
/////////////////////////////////////////////////////////////////////////////
// 窗口被销毁时注册当前单词
BOOL CMagicWordDlg::DestroyWindow()
{
RegCurrentRecord();
if ( m_pSet->IsOpen() )
m_pSet->Close();
if ( m_pSet )
delete m_pSet;
return CDialog::DestroyWindow();
}
/////////////////////////////////////////////////////////////////////////////
// 退出程序(注册当前单词)
void CMagicWordDlg::OnExit()
{
CDialog::OnOK();
}
/////////////////////////////////////////////////////////////////////////////
// 获得WM_CLOSE控制(注册当前单词)
void CMagicWordDlg::OnClose()
{
CDialog::OnClose();
}
/////////////////////////////////////////////////////////////////////////////
// 注册最后一个被显示的单词信息
void CMagicWordDlg::RegCurrentRecord()
{
HKEY hKey = 0;
char szStatus[26] = { '\0' };
DWORD dwSize = 27;
if ( RegOpenKeyEx( HKEY_CURRENT_USER, "SOFTWARE\\MagicWord",
NULL, KEY_ALL_ACCESS, &hKey ) == ERROR_SUCCESS )
{
wsprintf( szStatus, "%s", m_pSet->m_Word );
RegSetValueEx( hKey, "CurrentWord", 0, REG_SZ, (CONST BYTE*) szStatus, dwSize );
RegCloseKey( hKey );
}
else
{
RegCreateKey( HKEY_CURRENT_USER, "SOFTWARE\\MagicWord", &hKey );
wsprintf( szStatus, "%s", m_pSet->m_Word );
RegSetValueEx( hKey, "CurrentWord", 0, REG_SZ, (CONST BYTE*) szStatus, dwSize );
RegCloseKey( hKey );
}
}
/////////////////////////////////////////////////////////////////////////////
// 使回车键无效
void CMagicWordDlg::OnOK()
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -