📄 magicworddlg.cpp
字号:
// 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 + -