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

📄 transparentwnd.cpp

📁 visual c++ 实例编程
💻 CPP
📖 第 1 页 / 共 4 页
字号:
				IDR_POPUP, 
				_T("精灵信使 V1.0"), 
				m_hIcon, 
				1,							//一幅图像
				1000,						//延时1秒变化
				WM_TRAYNOTIFY))
	{
		AfxMessageBox(_T("错误:创建系统图标失败!"), MB_OK | MB_ICONSTOP);
		return -1;
	}

	// 建立信息提示窗
	m_Tip.Create(GetDesktopWindow());

	m_bShowNews = TRUE;                        //新闻显示初始为真
	m_bFullScreenWalk = TRUE;				   //全屏运动标志初始置真
	m_bMute = FALSE;                           //静音标志
	m_bTopShow = TRUE;                         //最顶层显示标志
	m_bRest = FALSE;                           //静止标志

	m_bRing = FALSE;                           //闹铃提示标志
	m_Time = NULL;                             //闹铃时间为空
	m_iAction = 1;							   //初始行为表现
	m_iSecondNum = 0;                          //初始秒数为0
	SetTimer(TIMER_SET,300,NULL);

	//窗体拖运时变量初始化
	m_bDragDrop=FALSE;  
	m_ptCurPoint=CPoint(0,0);

	//判断程序是否已设置了开机自启动选项
	HKEY hKey;
	LONG lRet;
	DWORD dwLength, dwDataType;
	TCHAR szBuffer[MAX_PATH];

	// 打开注册表键
	lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE, gcszAutoRunKey,
			0, KEY_READ | KEY_WRITE, &hKey );
	if( lRet != ERROR_SUCCESS )
		return FALSE;

	// 查询自动运行项目是否存在
	dwLength = sizeof( szBuffer );
	lRet = RegQueryValueEx( hKey, gcszWindowClass, 
			NULL, &dwDataType, (LPBYTE)szBuffer, &dwLength );
		
	if( lRet == ERROR_SUCCESS )
		m_bAutorun = TRUE;                     //已设置自动运行标志
	else
		m_bAutorun = FALSE;					   //没有设置自动运行标志


	//置窗体初始显示位置
	CRect rcW;
	GetWindowRect(&rcW);
	m_Rect=GetTopWndTitleRect();	
	rcW.top =m_Rect.top-rcW.Height();
	rcW.bottom =m_Rect.top;
	rcW.left =10;
	//置窗体为最顶层显示及其位置
	SetWindowPos(&wndTopMost,rcW.left,rcW.top,rcW.Width(),rcW.Height(),SWP_NOSIZE|SWP_NOMOVE);


	//获取主程序所在路径,存在全局变量strPath中
	GetModuleFileName(NULL,strPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
	strPath.ReleaseBuffer ();
    int nPos;
	nPos=strPath.ReverseFind ('\\');
	strPath=strPath.Left (nPos);

	CFileFind  fFind;
	BOOL bFailed;
	bFailed=fFind.FindFile(strPath+"\\News.txt",0);
    //是否已下载提示文件,否则下载它并打开文件
	if(!bFailed)
		m_bDownloadFailed=GetSourceHtml("http://www.philips120dreams.com/member/pet_news/news.txt","News.txt");	//下载提示文件的默认网址
	else
		m_bDownloadFailed=TRUE;
    fFind.Close ();
	if(m_bDownloadFailed)
		m_bSuccess=m_bDownloadFailed=m_sdFile.Open(strPath+"\\News.txt",
		CFile::modeRead | CFile::typeText);


	//同时在系统区上面显示广告窗体,只能是无模式对话框
    m_pADdlg = new CAdvertise(this);
    m_pADdlg->Create(IDD_DIALOG_ADVERTISE,this);
	m_pADdlg->ShowWindow(SW_SHOW);


	return 0;
}

//********************************************************************************
//* 名称:OnTrayNotification()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:系统区创建的图标映射涵数
//********************************************************************************
LRESULT CTransparentWnd::OnTrayNotification(WPARAM wParam, LPARAM lParam)
{
  
  return m_TrayIcon.OnTrayNotification(wParam, lParam);
}

//********************************************************************************
//* 名称:OnEraseBkgnd()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:擦除背景
//********************************************************************************
BOOL CTransparentWnd::OnEraseBkgnd(CDC* pDC) 
{

	CRect	rect;
	GetWindowRect(&rect);

	CDC memDC;
	CBitmap			&cBitmap=m_bmpDraw;;
	CBitmap*		pOldMemBmp = NULL;
	CFont* pOldMemFont=NULL;

	memDC.CreateCompatibleDC(pDC);
	pOldMemBmp = memDC.SelectObject(&cBitmap);
	pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY);

	if (pOldMemBmp) memDC.SelectObject( pOldMemBmp );

	return TRUE;
}

//********************************************************************************
//* 名称:OnPaint()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:刷新背景
//********************************************************************************
void CTransparentWnd::OnPaint()
{
	CPaintDC dc(this);
	
}

//********************************************************************************
//* 名称:OnTimer()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:触发定时器
//********************************************************************************
void CTransparentWnd::OnTimer(UINT nIDEvent) 
{
	
	switch(nIDEvent)
	{
	case(1):				//判定何种运行方式
		DoSet();
		break;

	case(2):				//散步
		DoWalk();
		break;

	case(3):				//休息
		DoIdle();
		break;

	case(4):				//奔跑
		DoRun();
		break;

	case(5):				//播放声音
		KillTimer(TIMER_PLAYSOUND);
		break;

	case(6):
		DoDrag();			//实时拖动
		break;

	case(7):
		DoTransform();      //变形
		break;

	case(8):                //闹铃设置
		{
			int hour,min,sec;
			int yhour,ymin,ysec;
			
			CTime nowtime = CTime::GetCurrentTime();

			hour = nowtime.GetHour();
			min	 = nowtime.GetMinute();
			sec  = nowtime.GetSecond();
			
			yhour = m_Time.GetHour();
			ymin  = m_Time.GetMinute();
			ysec  = m_Time.GetSecond();
			
			//如果时间到,则进行闹铃
			if(hour == yhour && min == ymin && sec==ysec)
			{
				m_bRing = TRUE;
				OnActionIdle();            //用Idle行为来闹铃提示
			}
			else if(m_bRing==TRUE)         //关闭闹铃  	
			{		
				OnActionIdle();            //用Idle行为来闹铃提示
				
				if( m_iAniSeq%80 == 0)
				{
					KillTimer(TIMER_SETRING);
					m_bRing = FALSE;
				}
			}
		}
		break;

	case(9):
		DoFall();             //鼠标拖动释放后的下落表现
		break;

	default:
		break;
	}
	
	if(nIDEvent!=5 && nIDEvent!=6 && nIDEvent!=8)
		m_iAction= nIDEvent;    //当前行为表现方式标志

	m_iAniSeq++;				//下一幅图像       
	if(m_iAniSeq>156)           //13X12
		m_iAniSeq=0;    

	CWnd::OnTimer(nIDEvent);
}

//********************************************************************************
//* 名称:OnDestroy()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:销毁窗体
//********************************************************************************
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);
	if(m_bMute)
		m_popmenu.ModifyODMenu(NULL, IDR_OPTION_MUTE,IDB_CHECK);
	if(m_bTopShow)
		m_popmenu.ModifyODMenu(NULL, IDR_OPTION_TOPSHOW,IDB_CHECK);
	if(m_bRest)
		m_popmenu.ModifyODMenu(NULL, IDR_OPTION_REST,IDB_CHECK);
	if(m_bAutorun)
		m_popmenu.ModifyODMenu(NULL, IDR_AUTORUN,IDB_CHECK);
	if(m_bShowNews)
		m_popmenu.ModifyODMenu(NULL, IDR_SHOWNEWS,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,"退出"))
	{
		if(IDCANCEL==dlg.DoModal())
		{
			m_TrayIcon.RemoveIcon();          //删除系统区图标
			
			DestroyWindow();
		}
	}
*/
	CHelpTipDlg dlg;

	m_Tip.SetHideDelay(100);     //隐藏提示窗
	m_Tip.Hide();

	dlg.DoModal();
	m_TrayIcon.RemoveIcon();     //删除系统区图标

	if(m_bAutorun)
	{
		//设置为开机自动运行 
		StartupAutorun(TRUE);
	}
	else
	{
		//取消开机自动运行 
		StartupAutorun(FALSE);
	}

	DestroyWindow();
}

//********************************************************************************
//* 名称:OnOptionMute()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:静音
//********************************************************************************
void CTransparentWnd::OnOptionMute() 
{
	m_bMute = !m_bMute;;   

}   

//********************************************************************************
//* 名称:OnOptionRest()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:静止
//********************************************************************************
void CTransparentWnd::OnOptionRest() 
{
	m_bRest = !m_bRest;
	
}

//********************************************************************************
//* 名称:OnOptionTopshow()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:顶层显示
//********************************************************************************
void CTransparentWnd::OnOptionTopshow() 
{
	m_bTopShow = !m_bTopShow;
	
}

//********************************************************************************
//* 名称:OnFullscreenWalk()
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:全屏运动还是局部运动
//********************************************************************************
void CTransparentWnd::OnFullscreenWalk() 
{
	m_bFullScreenWalk = !m_bFullScreenWalk;	

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -