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

📄 myscreenwnd.cpp

📁 vc程序设计技巧与实例中关于多媒体技术的vc++原代码
💻 CPP
字号:
// MyScreenWnd.cpp : implementation file
//

#include "stdafx.h"
#include "MyScreenSaver.h"
#include "MyScreenWnd.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

LPCSTR CMyScreenWnd::lpszClassName=NULL;

/////////////////////////////////////////////////////////////////////////////
// CMyScreenWnd

CMyScreenWnd::CMyScreenWnd()
{
	//设定定时器ID
	m_TimerID = 1;
	//设定m_Point的初值
	m_Point.x = -1;
	m_Point.y =-1;
}

CMyScreenWnd::~CMyScreenWnd()
{
}


BEGIN_MESSAGE_MAP(CMyScreenWnd, CWnd)
	//{{AFX_MSG_MAP(CMyScreenWnd)
	ON_WM_TIMER()
	ON_WM_DESTROY()
	ON_WM_SYSCOMMAND()
	ON_WM_KEYDOWN()
	ON_WM_LBUTTONDOWN()
	ON_WM_MBUTTONDOWN()
	ON_WM_RBUTTONDOWN()
	ON_WM_MOUSEMOVE()
	ON_WM_ACTIVATE()
	ON_WM_ACTIVATEAPP()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CMyScreenWnd message handlers
/**********************************************************************
函数名:Create
用途:  注册窗口类、创建窗口
参数:  
返回值:
**********************************************************************/
BOOL CMyScreenWnd::Create()
{
	if (lpszClassName==NULL)
	{
		//注册类,IDC_NOCURSOR为新建光标的ID(需要用户自己绘制)
        //这个光标没有任何图案
		lpszClassName=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,
			::LoadCursor(AfxGetResourceHandle(),MAKEINTRESOURCE(IDC_NOCURSOR)));
		
	}
	
	//得到显示屏的长度和宽度
	CRect rect(0,0,::GetSystemMetrics(SM_CXSCREEN),
		::GetSystemMetrics(SM_CYSCREEN));
	//创建一个全屏窗口    
	CreateEx(WS_EX_TOPMOST,lpszClassName,_T(""),WS_VISIBLE | WS_POPUP,
		rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,
		GetSafeHwnd(),NULL,NULL);  
	//设置定时器,2秒换一幅图
	SetTimer(m_TimerID,FRAME_TIME,NULL);   
	return TRUE;
}

/**********************************************************************
函数名:DrawBitmap
用途:  绘制屏保需要的BMP图象
参数:  dc[in],客户区DC,nIndex[in],显示的图象编号索引
返回值:
**********************************************************************/
void CMyScreenWnd::DrawBitmap(CDC& dc,int nIndex)
{
	CDC dcMem;
	//创建一个兼容DC
	dcMem.CreateCompatibleDC(&dc);
	CBitmap m_Bitmap;
	//装载Bitmap
	m_Bitmap.LoadBitmap(IDB_BITMAP1+nIndex);   
	dcMem.SelectObject(m_Bitmap);

	//位图拷贝
	dc.StretchBlt(0,0,::GetSystemMetrics(SM_CXSCREEN),::GetSystemMetrics(SM_CYSCREEN),
		          &dcMem,0,0,FRAME_WIDTH,FRAME_HEIGHT,SRCCOPY);
}


void CMyScreenWnd::OnTimer(UINT nIDEvent)
{
	CClientDC ClientDC(this);
	
	static int nIndex=0;
	nIndex %= FRAME_NUM;
	DrawBitmap(ClientDC,nIndex++);
	CWnd::OnTimer(nIDEvent);
}

void CMyScreenWnd::OnDestroy() 
{
	//清除定时器
	KillTimer(m_TimerID);	
}

void CMyScreenWnd::OnSysCommand(UINT nID, LPARAM lParam) 
{
	//关闭屏保程序
	PostMessage(WM_CLOSE);

}

void CMyScreenWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	//关闭屏保程序
	PostMessage(WM_CLOSE);
}

void CMyScreenWnd::OnLButtonDown(UINT nFlags, CPoint point) 
{
	//关闭屏保程序
	PostMessage(WM_CLOSE);
}

void CMyScreenWnd::OnMButtonDown(UINT nFlags, CPoint point) 
{
	//关闭屏保程序
	PostMessage(WM_CLOSE);
}

void CMyScreenWnd::OnRButtonDown(UINT nFlags, CPoint point) 
{
	//关闭屏保程序
	PostMessage(WM_CLOSE);
}

void CMyScreenWnd::OnMouseMove(UINT nFlags, CPoint point) 
{
	if (m_Point==CPoint(-1,-1))
	{
		//记录上一次鼠标所在位置
		m_Point=point;
	}
	else if (m_Point!=point) //如果上次鼠标的位置和本次不一致则说明鼠标移动了
	{                        //此时应该关闭屏保程序
		
		//关闭屏保程序
		PostMessage(WM_CLOSE);	  
	}
}

void CMyScreenWnd::OnActivate(UINT nState,CWnd* pWndOther,BOOL bMinimized)
{
	CWnd::OnActivate(nState,pWndOther,bMinimized);
	if (nState==WA_INACTIVE)
		PostMessage(WM_CLOSE);
}
void CMyScreenWnd::OnActivateApp(BOOL bActive,HTASK hTask)
{
	CWnd::OnActivateApp(bActive,hTask);
	if (!bActive)    
		PostMessage(WM_CLOSE);
}

void CMyScreenWnd::PostNcDestroy() 
{
    delete this;
	CWnd::PostNcDestroy();
}

⌨️ 快捷键说明

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