📄 picturescreensvr.cpp
字号:
// PictureScreenSvr.cpp : Defines the class behaviors for the application.
//
#include "stdafx.h"
#include "PictureScreenSvr.h"
#include "scrnsave.h"
#pragma comment( lib, "scrnsave" )
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPictureScreenSvrApp
/*
BEGIN_MESSAGE_MAP(CPictureScreenSvrApp, CWinApp)
//{{AFX_MSG_MAP(CPictureScreenSvrApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPictureScreenSvrApp construction
CPictureScreenSvrApp::CPictureScreenSvrApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CPictureScreenSvrApp object
// CPictureScreenSvrApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CPictureScreenSvrApp initialization
BOOL CPictureScreenSvrApp::InitInstance()
{
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}
*/
#define EVENT_REFRESH 20 // 定时器索引值
int m_cxscreen = ::GetSystemMetrics(SM_CXSCREEN); //屏幕宽,单位:像素
int m_cyscreen = ::GetSystemMetrics(SM_CYSCREEN); //屏幕高,单位:像素
int m_xoffset; // 当前画面显示的横向位置
int m_yoffset = (m_cyscreen - 480) / 2; // 当前画面显示的纵向位置,初始为中间
int m_nSteps = 2; // 画面滚动速度
LRESULT WINAPI ScreenSaverProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_PAINT:
{
::AfxSetResourceHandle(hMainInstance);
CWnd* pWnd = CWnd::FromHandle(hWnd);
CRect rect;
pWnd->GetClientRect(&rect);
CPaintDC dc(pWnd);
if (fChildPreview)
{
dc.SetMapMode(MM_ANISOTROPIC);
dc.SetViewportExt(rect.Width(), rect.Height());
dc.SetWindowExt(m_cxscreen, m_cyscreen);
}
rect.right = m_xoffset - 1;
if (rect.right > rect.left)
dc.FillSolidRect(rect, RGB(0, 0, 0));
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP);
CDC dcmem;
dcmem.CreateCompatibleDC(&dc);
CBitmap* pold = (CBitmap*)dcmem.SelectObject(&bitmap);
dc.BitBlt(m_xoffset, m_yoffset, 640, 480, &dcmem, 0, 0, SRCCOPY);
dcmem.SelectObject(pold);
bitmap.DeleteObject();
return TRUE;
}
case WM_CREATE:
::LoadString(hMainInstance, idsIniFile, szIniFile, MAXFILELEN);
::LoadString(hMainInstance, idsAppName, szAppName, APPNAMEBUFFERLEN);
m_nSteps = ::GetPrivateProfileInt(szAppName, _T("滚动速度"), 1, szIniFile);
::SetTimer(hWnd, EVENT_REFRESH, 50, NULL);
m_xoffset = -640;
m_yoffset = (m_cyscreen - 480) / 2;
break;
case WM_DESTROY:
::KillTimer(hWnd, EVENT_REFRESH);
break;
case WM_TIMER:
{
m_xoffset += m_nSteps;
if (m_xoffset > m_cxscreen)
{
m_xoffset = -640;
}
RECT rect;
::GetClientRect(hWnd, &rect);
::InvalidateRect(hWnd, &rect, FALSE);
}
break;
}
return DefScreenSaverProc(hWnd, message, wParam, lParam);
}
BOOL WINAPI RegisterDialogClasses (HANDLE hInst)
{
return TRUE;
}
BOOL WINAPI ScreenSaverConfigureDialog (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
{
::LoadString(hMainInstance, idsIniFile, szIniFile, MAXFILELEN);
::LoadString(hMainInstance, idsAppName, szAppName, APPNAMEBUFFERLEN);
m_nSteps = ::GetPrivateProfileInt(szAppName, _T("滚动速度"), 1, szIniFile);
CScrollBar* pBar = (CScrollBar*)CWnd::FromHandle(GetDlgItem(hDlg, IDC_SCROLLBAR));
pBar->SetScrollRange(1, 10);
pBar->SetScrollPos(m_nSteps);
}
return TRUE;
case WM_COMMAND:
if (wParam == IDOK)
{
::LoadString(hMainInstance, idsIniFile, szIniFile, MAXFILELEN);
::LoadString(hMainInstance, idsAppName, szAppName, APPNAMEBUFFERLEN);
TCHAR buf[3];
::memset(buf, 0, sizeof(TCHAR) * 3);
wsprintf(buf, _T("%d"), m_nSteps);
::LoadString(hMainInstance, idsIniFile, szIniFile, MAXFILELEN);
::LoadString(hMainInstance, idsAppName, szAppName, APPNAMEBUFFERLEN);
::WritePrivateProfileString(szAppName, _T("滚动速度"), buf, szIniFile);
::EndDialog(hDlg, IDOK);
}
else ::EndDialog(hDlg, IDCANCEL);
return TRUE;
case WM_HSCROLL:
{
CScrollBar* pBar = (CScrollBar*)CWnd::FromHandle((HWND)lParam);
switch (LOWORD(wParam))
{
case SB_BOTTOM:
m_nSteps = 10;
break;
case SB_TOP:
m_nSteps = 1;
break;
case SB_PAGEDOWN:
m_nSteps += 2;
if (m_nSteps > 10) m_nSteps = 10;
break;
case SB_PAGEUP:
m_nSteps -= 2;
if (m_nSteps < 1) m_nSteps = 1;
break;
case SB_LINEDOWN:
if (m_nSteps < 10) m_nSteps++;
break;
case SB_LINEUP:
if (m_nSteps > 1) m_nSteps--;
break;
case SB_THUMBPOSITION:
m_nSteps = HIWORD(wParam);
break;
}
pBar->SetScrollPos(m_nSteps);
}
return TRUE;
default:
break;
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -