154 lines
4.1 KiB
C++
154 lines
4.1 KiB
C++
// SelectBlkDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "SelectBlkDlg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CSelectBlkDlg dialog
|
|
|
|
|
|
CSelectBlkDlg::CSelectBlkDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CSelectBlkDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CSelectBlkDlg)
|
|
//}}AFX_DATA_INIT
|
|
m_staticSlide.m_iRowNum = 3;
|
|
m_staticSlide.m_iColNum = 3;
|
|
}
|
|
|
|
|
|
void CSelectBlkDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CSelectBlkDlg)
|
|
DDX_Control(pDX, IDC_SCROLLBAR_BLK, m_vsBar);
|
|
DDX_Control(pDX, IDC_STATIC_PREVIEW, m_staticSlide);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CSelectBlkDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CSelectBlkDlg)
|
|
ON_WM_LBUTTONDOWN()
|
|
ON_WM_RBUTTONDOWN()
|
|
ON_WM_VSCROLL()
|
|
//}}AFX_MSG_MAP
|
|
// ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipNotify)
|
|
// ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipNotify)
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CSelectBlkDlg message handlers
|
|
|
|
BOOL CSelectBlkDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
CRect rect;
|
|
this->GetWindowRect(&rect);
|
|
CPoint pt2;
|
|
pt2.x = m_ptBase.x + rect.Width();
|
|
pt2.y = m_ptBase.y + rect.Height();
|
|
CRect rect2(m_ptBase, pt2);
|
|
this->MoveWindow(&rect2);
|
|
m_staticSlide.ResetSource(m_csTkName, m_csType, -1, 0, 0);
|
|
InitVSBar();
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CSelectBlkDlg::OnLButtonDown(UINT nFlags, CPoint point)
|
|
{
|
|
CDialog::OnLButtonDown(nFlags, point);
|
|
CDialog::OnOK();
|
|
}
|
|
|
|
void CSelectBlkDlg::OnRButtonDown(UINT nFlags, CPoint point)
|
|
{
|
|
CDialog::OnRButtonDown(nFlags, point);
|
|
CDialog::OnCancel();
|
|
}
|
|
|
|
|
|
BOOL CSelectBlkDlg::PreTranslateMessage(MSG* pMsg)
|
|
{
|
|
if(pMsg->message == 280) //µã»÷¶Ô»°¿òÍâ
|
|
CDialog::OnCancel();
|
|
else if(pMsg->message == WM_KEYDOWN && (pMsg->wParam == VK_UP || pMsg->wParam == VK_PRIOR))
|
|
m_staticSlide.OnPgup();
|
|
else if(pMsg->message == WM_KEYDOWN && (pMsg->wParam == VK_DOWN || pMsg->wParam == VK_NEXT))
|
|
m_staticSlide.OnPgdown();
|
|
return CDialog::PreTranslateMessage(pMsg);
|
|
}
|
|
|
|
|
|
BOOL CSelectBlkDlg::InitVSBar()
|
|
{
|
|
int totalRec, pageSize, imageRowNum, imageColNum;
|
|
imageRowNum = m_staticSlide.m_iRowNum;
|
|
imageColNum = m_staticSlide.m_iColNum;
|
|
pageSize = imageRowNum * imageColNum;
|
|
|
|
totalRec = (int)m_staticSlide.m_lstSlide.GetCount();
|
|
if(totalRec <= pageSize || totalRec == 0){
|
|
m_vsBar.ShowScrollBar(FALSE);
|
|
CRect rect;
|
|
this->GetWindowRect(&rect);
|
|
rect.right -= 20;
|
|
this->MoveWindow(&rect);
|
|
|
|
return FALSE;
|
|
}
|
|
else
|
|
m_vsBar.ShowScrollBar(TRUE);
|
|
SCROLLINFO scrollInfo;
|
|
scrollInfo.cbSize = sizeof(SCROLLINFO);
|
|
scrollInfo.fMask = SIF_ALL;
|
|
scrollInfo.nMin = 0;
|
|
scrollInfo.nMax = ((totalRec-1) / pageSize+1) * imageRowNum-1;
|
|
scrollInfo.nPage = imageRowNum;
|
|
scrollInfo.nPos = m_staticSlide.m_iPage * imageRowNum;
|
|
m_vsBar.SetScrollInfo(&scrollInfo, TRUE);
|
|
return TRUE;
|
|
}
|
|
|
|
void CSelectBlkDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
|
|
{
|
|
if(pScrollBar != &m_vsBar){
|
|
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
|
|
return;
|
|
}
|
|
UINT nEndPos = pScrollBar->GetScrollPos();
|
|
switch(nSBCode){
|
|
case SB_THUMBPOSITION: //Í϶¯»¬¿é
|
|
m_staticSlide.GoPage(nPos/m_staticSlide.m_iRowNum);
|
|
nEndPos = nPos;
|
|
break;
|
|
case SB_LINEDOWN:
|
|
m_staticSlide.OnPgdown();
|
|
nEndPos += m_staticSlide.m_iRowNum;
|
|
break;
|
|
case SB_LINEUP:
|
|
m_staticSlide.OnPgup();
|
|
nEndPos -= m_staticSlide.m_iRowNum;
|
|
break;
|
|
case SB_PAGEDOWN:
|
|
m_staticSlide.OnPgdown();
|
|
nEndPos += m_staticSlide.m_iRowNum;
|
|
break;
|
|
case SB_PAGEUP:
|
|
m_staticSlide.OnPgup();
|
|
nEndPos -= m_staticSlide.m_iRowNum;
|
|
break;
|
|
}
|
|
pScrollBar->SetScrollPos(nEndPos);
|
|
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
|
|
}
|
|
|