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

📄 transparentwnd.cpp

📁 visual c++ 实例编程
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//********************************************************************************
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 + -