#include "stdafx.h" #include "SelectBlkDlg.h" CSelectBlkDlg::CSelectBlkDlg(CWnd* pParent /*=NULL*/) : CDialog(CSelectBlkDlg::IDD, pParent) { m_staticSlide.m_iRowNum = 3; m_staticSlide.m_iColNum = 3; } void CSelectBlkDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_SCROLLBAR_BLK, m_vsBar); DDX_Control(pDX, IDC_STATIC_PREVIEW, m_staticSlide); } BEGIN_MESSAGE_MAP(CSelectBlkDlg, CDialog) ON_WM_LBUTTONDOWN() ON_WM_RBUTTONDOWN() ON_WM_VSCROLL() 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); }