📄 magicworddlg.cpp
字号:
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()
{
NOTIFYICONDATA tnid;
tnid.cbSize=sizeof(NOTIFYICONDATA);
tnid.hWnd=this->m_hWnd;
tnid.uID=IDR_MAINFRAME;//保证删除的是我们的图标
Shell_NotifyIcon(NIM_DELETE,&tnid);
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()
{
}
/////////////////////////////////////////////////////////////////////////////
// 实现不规则窗体
void CMagicWordDlg::SetupRegion(CDC *pDC, unsigned short MaskID)
{
CDC memDC;
CBitmap cBitmap;
CBitmap* pOldMemBmp = NULL;
COLORREF col;
CRect cRect;
int x, y;
int m,n;
POINT *a;
CRgn wndRgn, rgnTemp;
bool left,right;
a=(POINT *)malloc(800*2*(sizeof(POINT)));
if(a==NULL)
{
MessageBox("申请内存失败!");
exit(0);
}
GetWindowRect(&cRect);
cBitmap.LoadBitmap(MaskID);
memDC.CreateCompatibleDC(pDC);
pOldMemBmp = memDC.SelectObject(&cBitmap);
wndRgn.CreateRectRgn(0, 0, cRect.Width(), cRect.Height());
m=0;
n=cRect.Height()*2-1;
for(y=0;y<cRect.Height();y++)
{
left=true;
for(x=0;x<cRect.Width();x++)
{
col = memDC.GetPixel(x, y);
if(col!=RGB(0,0,0))
{
a[m].x=x;
a[m].y=y;
left=false;
break;
}
}
if(left)
a[m]=a[m-1];
m++;
right=true;
for(x=cRect.Width()-1;x>=0;x--)
{
col = memDC.GetPixel(x, y);
if(col!=RGB(0,0,0))
{
a[n].x=x;
a[n].y=y;
right=false;
break;
}
}
if(right)
a[n]=a[n+1];
n--;
}
n=cRect.Height()*2-1;
for(y=0;y<cRect.Height();y++)
{
for(x=a[y].x;x<a[n].x;x++)
{
col = memDC.GetPixel(x, y);
if(col==RGB(0,0,0))
{
rgnTemp.CreateRectRgn(x,y,x+1,y+1);
wndRgn.CombineRgn(&wndRgn, &rgnTemp, RGN_XOR);
rgnTemp.DeleteObject();
}
}
n--;
}
rgnTemp.CreatePolygonRgn(a,cRect.Height()*2,ALTERNATE);
wndRgn.CombineRgn(&wndRgn, &rgnTemp, RGN_AND);
rgnTemp.DeleteObject();
free(a);
if (pOldMemBmp) memDC.SelectObject(pOldMemBmp);
SetWindowRgn((HRGN)wndRgn, TRUE);
}
void CMagicWordDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnLButtonDown(nFlags, point);
PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y));
}
void CAboutDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnLButtonDown(nFlags, point);
PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y));
}
void CMagicWordDlg::OnLiben(WPARAM wParam,LPARAM lParam)
{
UINT uID;//发出该消息的图标的ID
UINT uMouseMsg;//鼠标动作
POINT pt;
uID=(UINT) wParam;
uMouseMsg=(UINT) lParam;
CMenu menu;
if(uMouseMsg==WM_RBUTTONDOWN)//如果是单击右键
{
switch(uID)
{
case IDR_MAINFRAME://如果是我们的图标
GetCursorPos(&pt);//取得鼠标位置
//执行相应操作
menu.LoadMenu(IDR_MENU1);
pMenu=menu.GetSubMenu(0);
ASSERT(pMenu!=0);
pMenu->TrackPopupMenu (0,pt.x,pt.y,this);
break;
default:
break;
}
}
else if(uMouseMsg==WM_LBUTTONDBLCLK)//如果是单击左键
{
static bool isMax=false;
switch(uID)
{
case IDR_MAINFRAME:
if(isMax==false)
{
ShowWindow(SW_SHOW);
isMax=true;
}
else
{
ShowWindow(SW_HIDE);
isMax=false;
}
break;
default:
break;
}
}
return;
}
void CMagicWordDlg::OnMainWindow()
{
ShowWindow(SW_SHOW);
}
void CMagicWordDlg::OnSupport()
{
CAboutDlg AboutDlg;
AboutDlg.DoModal();
}
void CMagicWordDlg::OnExitform()
{
CDialog::OnOK();
NOTIFYICONDATA tnid;
tnid.cbSize=sizeof(NOTIFYICONDATA);
tnid.hWnd=this->m_hWnd;
tnid.uID=IDR_MAINFRAME;//保证删除的是我们的图标
Shell_NotifyIcon(NIM_DELETE,&tnid);
}
void CMagicWordDlg::OnChangemin()
{
// TODO: Add your control notification handler code here
ShowWindow(SW_HIDE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -