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

📄 magicworddlg.cpp

📁 魔法单词记忆——DAO访问ACCESS数据库
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                       _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 + -