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

📄 magicworddlg.cpp

📁 应用VC++制作英语词典
💻 CPP
📖 第 1 页 / 共 2 页
字号:
   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 + -