Files
envi-code/SourceCode/Code2026/Dimension/SelectBlkDlg.cpp
T
2026-09-28 15:28:50 +08:00

133 lines
3.5 KiB
C++

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