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

📄 magicworddlg.cpp

📁 一个直接操作数据库的类
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MagicWordDlg.cpp : implementation file
//
#include "stdafx.h"
#include "MagicWord.h"

#include "MagicWordDlg.h"
#include "ListItemDlg.h"
#include "WordInfoDlg.h"
#include "SearchDlg.h"

#include "WordDaoSet.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)
	//}}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
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMagicWordDlg dialog

CMagicWordDlg::CMagicWordDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMagicWordDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMagicWordDlg)
	m_sentences = _T("");
	m_explains = _T("");
	m_word = _T("");
	m_jump = _T("");
	m_goto = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

   // 实例化m_pSet
   m_pSet = new CWordDaoSet();
}

void CMagicWordDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMagicWordDlg)
	DDX_Text(pDX, IDC_EDIT_SENTENCE, m_sentences);
	DDX_Text(pDX, IDC_EDIT_EXPLAIN, m_explains);
	DDX_Text(pDX, IDC_STATIC_WORD, m_word);
	DDV_MaxChars(pDX, m_word, 26);
	DDX_Text(pDX, IDC_STATIC_JUMP, m_jump);
	DDV_MaxChars(pDX, m_jump, 26);
	DDX_Text(pDX, IDC_EDIT_GOTO, m_goto);
	DDV_MaxChars(pDX, m_goto, 26);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMagicWordDlg, CDialog)
	//{{AFX_MSG_MAP(CMagicWordDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_ADDITION, OnAddition)
	ON_BN_CLICKED(IDC_REMOVE, OnRemove)
	ON_BN_CLICKED(IDC_MODIFY, OnModify)
	ON_BN_CLICKED(IDC_SEARCH, OnSearch)
	ON_BN_CLICKED(IDC_ABOUT, OnAbout)
	ON_BN_CLICKED(IDC_NEXT, OnNext)
	ON_BN_CLICKED(IDC_PREVIOUS, OnPrevious)
	ON_BN_CLICKED(IDC_HOME, OnHome)
	ON_BN_CLICKED(IDC_END, OnEnd)
	ON_BN_CLICKED(IDC_JUMP, OnJump)
	ON_BN_CLICKED(IDC_GOTO, OnGoto)
	ON_BN_CLICKED(IDC_EXIT, OnExit)
	ON_WM_CLOSE()
	ON_BN_CLICKED(IDC_LISTITEM, OnListItem)
	ON_BN_CLICKED(IDC_SETTING, OnSetting)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMagicWordDlg message handlers

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

	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);

		if (!strAboutMenu.IsEmpty())
		{
         // 改变AboutMenu的菜单显示
         // strAboutMenu = _T( "关于魔法单词记忆!" );

			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

         // 删除最大化命令
         pSysMenu->DeleteMenu( 4, MF_BYPOSITION );
		}
	}

	SetIcon(m_hIcon, TRUE);
	SetIcon(m_hIcon, FALSE);

   // 如果以ClassWizard定义Button对象(再改其类型为CButtonStyle)
   // 由于InitBuffonStyle()内部SubclassDlgItem()
   // 需要对话框显示出来后才能做动作
   // 所以Debug模式下会异常(Release模式下正确)
   // 个人判断,或许不正确。
   InitButtonStyle();
   HistroyVisitWord();
   DisplayFirstRecord();

	return TRUE;
}

void CMagicWordDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

void CMagicWordDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); 

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

		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;

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


HCURSOR CMagicWordDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

/////////////////////////////////////////////////////////////////////////////
// 设置按钮风格
void CMagicWordDlg::InitButtonStyle()
{
   CList< CButtonStyle*, CButtonStyle* > ButtonList;
   //ButtonList.AddTail( &m_Setting );
   ButtonList.AddTail( &m_ListItem );
   ButtonList.AddTail( &m_Addition );
   ButtonList.AddTail( &m_Remove );
   ButtonList.AddTail( &m_Modify );
   ButtonList.AddTail( &m_Search );
   ButtonList.AddTail( &m_About );
   ButtonList.AddTail( &m_Exit );
   ButtonList.AddTail( &m_Previous );
   ButtonList.AddTail( &m_Next );
   ButtonList.AddTail( &m_End );
   ButtonList.AddTail( &m_Home );
   ButtonList.AddTail( &m_Goto );
   ButtonList.AddTail( &m_Jump );


   // 用循环实现必须手动改动Resource.h中的定义
   for ( int nIco = IDI_JUMP, nBtn = IDC_JUMP; nBtn >= IDC_LISTITEM; nIco--, nBtn-- )
   {
      CButtonStyle *Button = ButtonList.RemoveTail();
      Button->SubclassDlgItem( nBtn, this );
      Button->SetIcon( nIco );
      Button->SetInactiveBgColor();
      Button->SetInactiveFgColor();
      Button->SetActiveBgColor();
   }
}

/////////////////////////////////////////////////////////////////////////////
// 显示第一条纪录
void CMagicWordDlg::DisplayFirstRecord()
{
   try
   {
      if ( m_pSet->IsOpen() )
         m_pSet->Close();

      m_pSet->Open();
      PublicAssign();
   }
   catch( CDaoException *exception )
   {
      exception->ReportError();
      return;
   }
}

/////////////////////////////////////////////////////////////////////////////
// 为显示作必要的赋值操作
void CMagicWordDlg::PublicAssign()
{
   m_word.Empty();
   m_explains.Empty();
   m_sentences.Empty();

   CString strNewLine( "\r\n" );

   // 当前单词
   m_word = m_pSet->m_Word;

   // 翻译组合
   if ( !m_pSet->m_Explain0.IsEmpty() )
      m_explains += m_pSet->m_Explain0;
   if ( !m_pSet->m_Explain1.IsEmpty() )
      m_explains += ( strNewLine + m_pSet->m_Explain1 );
   if ( !m_pSet->m_Explain2.IsEmpty() )
      m_explains += ( strNewLine + m_pSet->m_Explain2 );

   // 短语及语句组合
   if ( !m_pSet->m_Phrase0.IsEmpty() )
      m_sentences += m_pSet->m_Phrase0;
   if ( !m_pSet->m_Phrase1.IsEmpty() )
      m_sentences += ( strNewLine + m_pSet->m_Phrase1 );
   if ( !m_pSet->m_Phrase2.IsEmpty() )
      m_sentences += ( strNewLine + m_pSet->m_Phrase2 );
   if ( !m_pSet->m_Sentence0.IsEmpty() )
      m_sentences += ( strNewLine + m_pSet->m_Sentence0 );
   if ( !m_pSet->m_Sentence1.IsEmpty() )
      m_sentences += ( strNewLine + m_pSet->m_Sentence1 );

   UpdateData( FALSE );
}

/////////////////////////////////////////////////////////////////////////////
// 程序设置功能
void CMagicWordDlg::OnSetting() 
{
}

/////////////////////////////////////////////////////////////////////////////
// 列举含有共同串的单词
void CMagicWordDlg::OnListItem() 
{
   CListItemDlg ListItemDlg;
   ListItemDlg.DoModal();
}

/////////////////////////////////////////////////////////////////////////////
// 添加新单词
void CMagicWordDlg::OnAddition() 
{
   CWordInfoDlg WordInfoDlg;
   CWordDaoSet  TempSet;
   CString      strSQL;

   // 如果点击了取消按钮,则不执行添加操作。
   if ( WordInfoDlg.DoModal() != IDOK )
      return;

   // 查询当前单词是否已经被收录于数据库中
   if ( TempSet.IsOpen() )
      TempSet.Close();
   
   strSQL.Format( "SELECT * FROM WordList WHERE word = '%s'", 
                  WordInfoDlg.m_word.operator LPCTSTR() );
   TempSet.Open( AFX_DAO_USE_DEFAULT_TYPE, strSQL, 0 );

   if ( !TempSet.IsEOF() )
   {
      MessageBox( _T( "当前单词纪录已存在,没有添加的必要!" ),
                  _T( "已经存在!" ), MB_OK | MB_ICONASTERISK );
      return;
   }

   if ( TempSet.IsOpen() )
      TempSet.Close();

   // 执行添加操作
   try
   {
      m_pSet->AddNew();

      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();
         MessageBox( _T( "添加新单词完成!" ), 
                     _T( "添加成功!" ), MB_OK | MB_ICONASTERISK );
      }
   }
   catch( CDaoException *exception )
   {
      exception->ReportError();
      // 否则指针会指向出现异常的纪录
      m_pSet->MoveNext();
      m_pSet->MovePrev();
      return;
   }
}

/////////////////////////////////////////////////////////////////////////////
// 删除单词信息
void CMagicWordDlg::OnRemove() 
{
   try
   {
      if ( MessageBox( _T( "你确定要删除当前单词信息吗?" ),

⌨️ 快捷键说明

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