// 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); }