📄 transparentwnd.cpp
字号:
//********************************************************************************
void CTransparentWnd::OnDestroy()
{
CWnd::OnDestroy();
}
//********************************************************************************
//* 名称:OnRButtonDown()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:弹出相关菜单
//********************************************************************************
void CTransparentWnd::OnRButtonDown(UINT nFlags, CPoint point)
{
CWnd::OnRButtonDown(nFlags, point);
m_popmenu.LoadMenu(IDR_POPUP);
BCMenu::SetMenuDrawMode(BCMENU_DRAWMODE_XP);
//设置选中时的复选框效果
if(m_bFullScreenWalk)
m_popmenu.ModifyODMenu(NULL, IDR_FULLSCREEN_WALK,IDB_CHECK);
ClientToScreen(&point);
BCMenu *psub = (BCMenu *)m_popmenu.GetSubMenu(0);
psub->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);
m_popmenu.DestroyMenu();
}
//********************************************************************************
//* 名称:PreTranslateMessage()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:传递提示窗消息
//********************************************************************************
BOOL CTransparentWnd::PreTranslateMessage(MSG* pMsg)
{
m_Tip.RelayEvent(pMsg);
return CWnd::PreTranslateMessage(pMsg);
}
//********************************************************************************
//* 名称:PreTranslateMessage()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:在显示窗体动画效果前,先寻找系统区位置
//********************************************************************************
BOOL CALLBACK FindTrayWnd(HWND hwnd, LPARAM lParam)
{
TCHAR szClassName[256];
GetClassName(hwnd, szClassName, 255);
// 比较窗口类名
if (_tcscmp(szClassName, _T("TrayNotifyWnd")) == 0)
{
CRect *pRect = (CRect*) lParam;
::GetWindowRect(hwnd, pRect);
return TRUE;
}
// 当找到时钟窗口时表示可以结束了
if (_tcscmp(szClassName, _T("TrayClockWClass")) == 0)
{
CRect *pRect = (CRect*) lParam;
CRect rectClock;
::GetWindowRect(hwnd, rectClock);
pRect->right = rectClock.left;
return FALSE;
}
return TRUE;
}
//********************************************************************************
//* 名称:PreTranslateMessage()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:显示窗口动画效果的涵数
//********************************************************************************
void CTransparentWnd::WinAnimation(bool ShowFlag)
{
CRect rect(0,0,0,0);
// 查找托盘窗口
CWnd* pWnd = FindWindow("Shell_TrayWnd", NULL);
if (pWnd)
{
pWnd->GetWindowRect(rect);
EnumChildWindows(pWnd->m_hWnd, FindTrayWnd, (LPARAM)&rect);
//rect 为托盘区矩形
CRect rcWnd;
GetWindowRect(rcWnd);
if(ShowFlag) //窗体滑向系统区
DrawAnimatedRects(GetSafeHwnd(),IDANI_CAPTION,rcWnd,rect);
else //窗体从系统区滑出
DrawAnimatedRects(GetSafeHwnd(),IDANI_CAPTION,rect,rcWnd);
}
}
//********************************************************************************
//* 名称:OnExit()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:退出程序
//********************************************************************************
void CTransparentWnd::OnExit()
{
CHelpTipDlg dlg;
//保证此对话框一次只弹出一个
if( !FindWindow(NULL,"精灵助手 -- 未来工作室(Future Studio)"))
{
if(IDCANCEL==dlg.DoModal())
{
m_TrayIcon.RemoveIcon(); //删除系统区图标
DestroyWindow();
}
}
}
//********************************************************************************
//* 名称:OnFullscreenWalk()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:全屏运动还是局部运动
//********************************************************************************
void CTransparentWnd::OnFullscreenWalk()
{
m_bFullScreenWalk = !m_bFullScreenWalk;
}
//********************************************************************************
//* 名称:OnUpdateFullscreenWalk()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:更新全屏运动还是局部运动
//********************************************************************************
void CTransparentWnd::OnUpdateFullscreenWalk(CCmdUI* pCmdUI)
{
if(m_bFullScreenWalk)
pCmdUI->SetCheck(TRUE);
else
pCmdUI->SetCheck(FALSE);
}
//********************************************************************************
//* 名称:OnShowhide()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:显示或隐藏精灵助手
//********************************************************************************
void CTransparentWnd::OnShowhide()
{
CWnd * pFrame; //得到当前窗体指针
pFrame=AfxGetApp()->GetMainWnd();
if(!pFrame->IsWindowVisible()) //是否进行窗体动画,窗体已显示则不进行
{
WinAnimation(false); //窗体动画从系统区滑出
pFrame->ShowWindow(SW_SHOW);
}
else //是否进行窗体动画,窗体已隐藏则不进行
{
pFrame->ShowWindow(SW_HIDE);
WinAnimation(true); //窗体动画滑入到系统区中
}
}
//********************************************************************************
//* 名称:OnInitMenuPopup()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:加此涵数,使动态新增菜单条同步以XP风格显示
//********************************************************************************
void CTransparentWnd::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
{
CWnd::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
if(!bSysMenu){
if(BCMenu::IsMenu(pPopupMenu)) BCMenu::UpdateMenu(pPopupMenu);
}
}
//********************************************************************************
//* 名称:OnMeasureItem()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:重新测量菜单条
//********************************************************************************
void CTransparentWnd::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
BOOL setflag=FALSE;
if(lpMeasureItemStruct->CtlType==ODT_MENU){
if(IsMenu((HMENU)lpMeasureItemStruct->itemID)&&BCMenu::IsMenu((HMENU)lpMeasureItemStruct->itemID)){
m_popmenu.MeasureItem(lpMeasureItemStruct);
setflag=TRUE;
}
}
if(!setflag)CWnd::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}
//********************************************************************************
//* 名称:OnMenuChar()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:重新绘制菜单条
//********************************************************************************
LRESULT CTransparentWnd::OnMenuChar(UINT nChar, UINT nFlags, CMenu* pMenu)
{
LRESULT lresult;
if(BCMenu::IsMenu(pMenu))
lresult=BCMenu::FindKeyboardShortcut(nChar, nFlags, pMenu);
else
lresult=CWnd::OnMenuChar(nChar, nFlags, pMenu);
return(lresult);
}
//********************************************************************************
//* 名称:GetFullScreenWalk()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:获取是否全屏运动的标志位
//********************************************************************************
bool CTransparentWnd::GetFullScreenWalk()
{
return m_bFullScreenWalk;
}
//********************************************************************************
//* 名称:OnDownload()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:设置下载网页地址
//********************************************************************************
void CTransparentWnd::OnDownload()
{
CDownloadAddress dlg;
CString str;
//保证此对话框一次只弹出一个
if(!FindWindow(NULL,"设置下载网址"))
{
if(dlg.DoModal()==IDOK)
{
if((str=dlg.GetDownloadAddress())!="")
{
CWnd * pFrame;
pFrame=AfxGetApp()->GetMainWnd();
pFrame->ShowWindow(SW_HIDE); //下载前先隐藏精灵助手
if(m_bSuccess)
{
m_sdFile.Close(); //先关闭原打开文件,以便新建文件
m_bSuccess=FALSE;
}
m_bDownloadFailed= FALSE; //选置假,避免显示提示窗信息
m_bDownloadFailed=GetSourceHtml(str); //下载新设置的网页
if(m_bDownloadFailed)
m_bSuccess=m_bDownloadFailed=m_sdFile.Open(strPath+"\\Tip.txt",
CFile::modeRead | CFile::typeText);
}
}
}
}
//********************************************************************************
//* 名称:OnActionRun()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:奔跑方式
//********************************************************************************
void CTransparentWnd::OnActionRun()
{
KillTimer(GetCurAction());
SetTimer(TIMER_RUN,500,NULL);
}
//********************************************************************************
//* 名称:OnActionWalk()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:散步方式
//********************************************************************************
void CTransparentWnd::OnActionWalk()
{
KillTimer(GetCurAction());
SetTimer(TIMER_WALK,500,NULL);
}
//********************************************************************************
//* 名称:OnActionIdle()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:休息方式
//********************************************************************************
void CTransparentWnd::OnActionIdle()
{
KillTimer(GetCurAction());
SetTimer(TIMER_IDLE,600,NULL);
}
//********************************************************************************
//* 名称:GetCurAction()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:获取当前行为表现方式
//********************************************************************************
int CTransparentWnd::GetCurAction()
{
return m_iAction;
}
//********************************************************************************
//* 名称:GetTopWndTitleRect()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:获取当前桌面最顶层窗口标题区大小
//********************************************************************************
CRect CTransparentWnd::GetTopWndTitleRect()
{
/*
HWND TopHwnd;
CHelpTipDlg ExitDlg;
CDownloadAddress AddressDlg;
CAbout aboutDlg;
TopHwnd=::GetForegroundWindow();
//不能是本程序所具有的窗体,否则返回初窗口标题区大小
if(TopHwnd==this->m_hWnd||TopHwnd==ExitDlg.m_hWnd||TopHwnd==AddressDlg.m_hWnd||TopHwnd==aboutDlg.m_hWnd)
return m_Rect;
CRect rtWnd;
::GetWindowRect(TopHwnd,&rtWnd);
return rtWnd;
*/
// 查找并返回任务栏窗口大小
CRect rect(0,0,0,0);
CWnd* pWnd = FindWindow("Shell_TrayWnd", NULL);
if (pWnd)
{
pWnd->GetWindowRect(&rect);
}
return rect;
}
//********************************************************************************
//* 名称:OnAbout()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:关于对话框
//********************************************************************************
void CTransparentWnd::OnAbout()
{
CAbout aboutDlg;
//保证此对话框一次只弹出一个
if(!FindWindow(NULL,"关于 精灵助手"))
aboutDlg.DoModal();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -