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

📄 preview.cpp

📁 MFC程序开发参考大全 【明日科技】宋坤 刘锐宁 李伟明 【丛 书 名】 软件工程师典藏 【出 版 社】 人民邮电出版社 本书详细介绍了MFC框架中所有常用类及控件的应用
💻 CPP
字号:
// Preview.cpp : implementation file
//

#include "stdafx.h"
#include "ScrollPreview.h"
#include "Preview.h"

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

/////////////////////////////////////////////////////////////////////////////
// CPreview dialog


CPreview::CPreview(CWnd* pParent /*=NULL*/)
	: CDialog(CPreview::IDD, pParent)
{
	//{{AFX_DATA_INIT(CPreview)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CPreview::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPreview)
	DDX_Control(pDX, IDC_PICTURE, m_Picture);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPreview, CDialog)
	//{{AFX_MSG_MAP(CPreview)
	ON_WM_PAINT()
	ON_WM_CTLCOLOR()
	ON_WM_HSCROLL()
	ON_WM_VSCROLL()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPreview message handlers

BOOL CPreview::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	SCROLLINFO vinfo;	
	vinfo.cbSize = sizeof(vinfo);
	vinfo.fMask = SIF_ALL;
	vinfo.nPage = 100;
	vinfo.nMax= 300;
	vinfo.nMin = 0;
	vinfo.nTrackPos = 0;
	vinfo.nPos = 0;	
	//设置垂直滚动条信息
	SetScrollInfo(SB_VERT,&vinfo);

	vinfo.fMask = SIF_ALL;
	vinfo.nPage = 100;
	vinfo.nMax= 260;
	vinfo.nMin = 0;
	vinfo.nPos  = 0;
	vinfo.nTrackPos = 0;
	vinfo.cbSize = sizeof(vinfo);
	//设置水平滚动条信息
	SetScrollInfo(SB_HORZ,&vinfo);
	m_Picture.MoveWindow(0,0,0,0);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CPreview::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	CDC* pDC=m_Picture.GetDC();
	TitleFont.CreatePointFont(200,"宋体",pDC);
	Font.CreatePointFont(160,"宋体",pDC);
	pDC->SelectObject(&TitleFont);
	pDC->TextOut(180,30,str[0]);
	pDC->SelectObject(&Font);
	for(int i=1;i<9;i++)
	{
		pDC->TextOut(90,40+i*40,str[i]);
	}
	Font.DeleteObject();
	TitleFont.DeleteObject();
	CRect rect;
	m_Picture.GetClientRect(&rect);
	dc.BitBlt(0,0,rect.Width(),rect.Height(),pDC,0,0,SRCCOPY);
}

HBRUSH CPreview::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	
	CBrush m_brush (RGB(255,255,255));
	CRect m_rect;
	GetClientRect(m_rect);
	pDC->FillRect(m_rect,&m_brush);
	return m_brush;
}


void CPreview::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	int pos,min,max,thumbwidth;

	SCROLLINFO vinfo;
	GetScrollInfo(SB_HORZ,&vinfo);
	
	pos = vinfo.nPos;
	min = vinfo.nMin;
	max = vinfo.nMax;
	thumbwidth = vinfo.nPage;

	switch (nSBCode)
	{
		case SB_THUMBTRACK: //拖动滚动块
			ScrollWindow(-(nPos-pos),0);
			SetScrollPos(SB_HORZ,nPos);
			break;
		case SB_LINELEFT : //单击左箭头
			if (pos != 0)
			{
				ScrollWindow(1,0);
				SetScrollPos(SB_HORZ,pos-1);
			}
			break;
		case SB_LINERIGHT: //单击右箭头
			if (pos+thumbwidth <= max)
			{
				SetScrollPos(SB_HORZ,pos+1);
				ScrollWindow(-1,0);	
			}
			break;
		case SB_PAGELEFT: //在滚动块的左方空白滚动区域单击
			if (pos >= thumbwidth)
			{
				ScrollWindow(thumbwidth,0);
				SetScrollPos(SB_HORZ,pos-thumbwidth);
			}
			else
			{
				ScrollWindow(pos,0);
				SetScrollPos(SB_HORZ,0);
			}
			break;
		case SB_PAGERIGHT: //在滚动块的右方空白滚动区域单击
			if (pos+thumbwidth <= max-thumbwidth)
			{
				ScrollWindow(-thumbwidth,0);
				SetScrollPos(SB_HORZ,pos+thumbwidth);
			}
			else
			{
				ScrollWindow(-(max-(pos+thumbwidth)),0);
				SetScrollPos(SB_HORZ,max-thumbwidth);
			}
			break;
	}
	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

void CPreview::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	int pos,min,max,thumbwidth;

	SCROLLINFO vinfo;
	GetScrollInfo(SB_VERT,&vinfo);
	
	pos = vinfo.nPos;
	min = vinfo.nMin;
	max = vinfo.nMax;
	thumbwidth = vinfo.nPage;

	switch (nSBCode)
	{
		case SB_THUMBTRACK:
			ScrollWindow(0,-(nPos-pos));
			SetScrollPos(SB_VERT,nPos);	
			break;
		case SB_LINELEFT:
			SetScrollPos(SB_VERT,pos-1);
			if (pos != 0)
				ScrollWindow(0,1);
			break;
		case SB_LINERIGHT:
			SetScrollPos(SB_VERT,pos+1);
			if (pos+thumbwidth < max)
				ScrollWindow(0,-1);	
			break;
		case SB_PAGELEFT: //在滚动块的上方空白滚动区域单击
			if (pos >= thumbwidth)
			{
				ScrollWindow(0,thumbwidth);
				SetScrollPos(SB_VERT,pos-thumbwidth);
			}
			else
			{
				ScrollWindow(0,pos);
				SetScrollPos(SB_VERT,0);
			}
			break;
		case SB_PAGERIGHT: //在滚动块的下方空白滚动区域单击
			if (pos+thumbwidth <= max-thumbwidth)
			{
				ScrollWindow(0,-thumbwidth);
				SetScrollPos(SB_VERT,pos+thumbwidth);
			}
			else
			{
				ScrollWindow(0,-(max-(pos+thumbwidth)));
				SetScrollPos(SB_VERT,max-thumbwidth);
			}
			break;
	}
	CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}

⌨️ 快捷键说明

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