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

📄 screensvrwnd.cpp

📁 "Visual C++.net实践与提高-深入Windows编程"的源代码
💻 CPP
字号:
// ScreenSvrWnd.cpp : implementation file
//

#include "stdafx.h"
#include "MyScreenSvr.h"
#include "ScreenSvrWnd.h"

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

/////////////////////////////////////////////////////////////////////////////
// CScreenSvrWnd

CScreenSvrWnd::CScreenSvrWnd(CWnd* pwnd /* = NULL */)
{
	pParentWnd = pwnd ;
	m_ptInitCursor.x = m_ptInitCursor.y = -1 ;
}

CScreenSvrWnd::~CScreenSvrWnd()
{
}

BOOL CScreenSvrWnd::Create()
{
	if(pParentWnd) /*!=NULL*/
	{ /*预览*/
		CRect rect;
		pParentWnd->GetClientRect(&rect);
		return CreateEx(0 , 
			::AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,NULL,
				static_cast<HBRUSH>(::GetStockObject(BLACK_BRUSH)),
				::AfxGetApp()->LoadIcon(IDR_MAINFRAME)),
			"预览" , WS_VISIBLE|WS_CHILD , 
			rect , pParentWnd , NULL 
			);
	}
	else
	{ /*屏幕保护窗口*/
#ifdef _DEBUG
		return CreateEx(0, 
			::AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,
			NULL,
			static_cast<HBRUSH>(::GetStockObject(BLACK_BRUSH)),
			::AfxGetApp()->LoadIcon(IDR_MAINFRAME)),
			"屏幕保护",WS_VISIBLE | WS_POPUP,
			CRect(0, 0,	::GetSystemMetrics(SM_CXSCREEN),
			::GetSystemMetrics(SM_CYSCREEN)) ,
			NULL , NULL );
#else
		return CreateEx(WS_EX_TOPMOST, 
					::AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,
						NULL,
						static_cast<HBRUSH>(::GetStockObject(BLACK_BRUSH)),
						::AfxGetApp()->LoadIcon(IDR_MAINFRAME)),
					"屏幕保护",WS_VISIBLE | WS_POPUP,
					CRect(0, 0,	::GetSystemMetrics(SM_CXSCREEN),
						::GetSystemMetrics(SM_CYSCREEN)) ,
					NULL , NULL );
#endif
	}
}

BEGIN_MESSAGE_MAP(CScreenSvrWnd, CWnd)
	//{{AFX_MSG_MAP(CScreenSvrWnd)
	ON_WM_KEYDOWN()
	ON_WM_LBUTTONDOWN()
	ON_WM_MBUTTONDOWN()
	ON_WM_MOUSEMOVE()
	ON_WM_RBUTTONDOWN()
	ON_WM_SYSKEYDOWN()
	ON_WM_CLOSE()
	ON_WM_CREATE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CScreenSvrWnd message handlers

void CScreenSvrWnd::PostNcDestroy() 
{
	// 由于此窗口为本EXE模块的主窗口,退出消息循环后,需要进行自删除
	delete this ;		
}

void CScreenSvrWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	if( pParentWnd == NULL ) {
		this->PostMessage(WM_CLOSE);
	}
	else
		CWnd::OnKeyDown(nChar, nRepCnt, nFlags);
}

void CScreenSvrWnd::OnLButtonDown(UINT nFlags, CPoint point) 
{
	if( pParentWnd == NULL ){
		this->PostMessage(WM_CLOSE);	
	}
	else
		CWnd::OnLButtonDown(nFlags, point);
}

void CScreenSvrWnd::OnMButtonDown(UINT nFlags, CPoint point) 
{
	if( pParentWnd == NULL ){
		this->PostMessage(WM_CLOSE);	
	}
	else
		CWnd::OnMButtonDown(nFlags, point);
}

void CScreenSvrWnd::OnMouseMove(UINT nFlags, CPoint point) 
{
	// 要防止鼠标过于微小的振动导致的窗口退出。
	if( pParentWnd == NULL){
		if( m_ptInitCursor.x<0 || m_ptInitCursor.y<0)
			m_ptInitCursor = point ;
		else{
			int i = abs(point.x - m_ptInitCursor.x) + abs(point.y - m_ptInitCursor.y) ;
			if( i > 3){
				this->DestroyWindow() ;
			}
		}
	}
	else
		CWnd::OnMouseMove(nFlags, point);
}

void CScreenSvrWnd::OnRButtonDown(UINT nFlags, CPoint point) 
{
	if( pParentWnd == NULL ){
		this->PostMessage(WM_CLOSE);	
	}
	else
		CWnd::OnRButtonDown(nFlags, point);
}

void CScreenSvrWnd::OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	if( pParentWnd == NULL ){
		this->PostMessage(WM_CLOSE);	
	}
	else
		CWnd::OnSysKeyDown(nChar, nRepCnt, nFlags);
}

void CScreenSvrWnd::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	CWnd::OnClose();
}

int CScreenSvrWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	if(pParentWnd == NULL)
		::ShowCursor(FALSE) ;
	
	return 0;
}

⌨️ 快捷键说明

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