www.gusucode.com > VC++浏览大像素的BMP图像-源码程序 > VC++浏览大像素的BMP图像-源码程序/code/BmpDlg.cpp

    // BmpDlg.cpp : implementation file
// Download by http://www.NewXing.com

#include "stdafx.h"
#include "BrownBMP.h"
#include "BmpDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CBmpDlg dialog


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


void CBmpDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CBmpDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CBmpDlg, CDialog)
	//{{AFX_MSG_MAP(CBmpDlg)
	ON_WM_HSCROLL()
	ON_WM_VSCROLL()
	ON_WM_MOUSEWHEEL()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CBmpDlg message handlers

void CBmpDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	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)
	{

	break;
	case SB_THUMBTRACK: //拖动滚动块
		ScrollWindow(-(nPos-pos),0);
		SetScrollPos(SB_HORZ,nPos);
	
	break;

	case SB_LINELEFT : //单击左箭头
		SetScrollPos(SB_HORZ,pos-1);
		if (pos !=0)
			ScrollWindow(1,0);
	break;

	case SB_LINERIGHT: //单击右箭头
		SetScrollPos(SB_HORZ,pos+1);
		if (pos+thumbwidth <max)
			ScrollWindow(-1,0);	
	break;

	case SB_PAGELEFT: //在滚动块的左方空白滚动区域单击,增量为6

		SetScrollPos(SB_HORZ,pos-6);
		if (pos+thumbwidth >0)
			ScrollWindow(6,0);
	break;

	case SB_PAGERIGHT: //在滚动块的右方空白滚动区域单击,增量为6

		SetScrollPos(SB_HORZ,pos+6);
		if (pos+thumbwidth <max)
			ScrollWindow(-6,0);
	break;

	}
	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

void CBmpDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	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:
		pos = GetScrollPos(SB_VERT);
		ScrollWindow(0,-(nPos-pos));
		SetScrollPos(SB_VERT,nPos);	
	break;

	case SB_LINELEFT:
		pos = GetScrollPos(SB_VERT);
		SetScrollPos(SB_VERT,pos-1);
		if (pos !=0)
			ScrollWindow(0,1);
	break;

	case SB_LINERIGHT:
		pos = GetScrollPos(SB_VERT);
		SetScrollPos(SB_VERT,pos+1);
		if (pos+thumbwidth <max)
			ScrollWindow(0,-1);	
	break;

	case SB_PAGELEFT: //在滚动块的上方空白滚动区域单击,增量为6

		SetScrollPos(SB_VERT,pos-6);
		if (pos+thumbwidth >0)
			ScrollWindow(0,6);
	break;

	case SB_PAGERIGHT: //在滚动块的下方空白滚动区域单击,增量为6

		SetScrollPos(SB_VERT,pos+6);
		if (pos+thumbwidth <max)
			ScrollWindow(0,-6);
	break;


	}	
	CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}

BOOL CBmpDlg::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) 
{
	SCROLLINFO vinfo;
	GetScrollInfo(SB_VERT,&vinfo);

	int min,max,thumbwidth;
	min = vinfo.nMin;
	max = vinfo.nMax;
	thumbwidth = vinfo.nPage;
	int pos = GetScrollPos(SB_VERT);
	
	if (zDelta>0)
	{
		if (pos==0)
			return TRUE;
		SetScrollPos(SB_VERT,pos-6);
		ScrollWindow(0,6);
	}
	else
	{
		if ((pos+thumbwidth>=max))
			return TRUE;
		SetScrollPos(SB_VERT,pos+6);
		ScrollWindow(0,-6);
	}

	return TRUE;
	//return CDialog::OnMouseWheel(nFlags, zDelta, pt);
}