// CombinePage.cpp : implementation file // #include "stdafx.h" #include "segdemo.h" #include "CombinePage.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CCombinePage property page IMPLEMENT_DYNCREATE(CCombinePage, CPropertyPage) CCombinePage::CCombinePage() : CPropertyPage(CCombinePage::IDD) { m_bChange = FALSE; memset(&m_CombineOptions,0, sizeof(m_CombineOptions)); //{{AFX_DATA_INIT(CCombinePage) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } CCombinePage::~CCombinePage() { } void CCombinePage::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCombinePage) DDX_Control(pDX, IDC_COMBINEFACTOR, m_edtCombineFactor); DDX_Control(pDX, IDC_COMBO_COMBININGTYPE, m_cmbCombineType); DDX_Control(pDX, IDC_SLIDER_COMBINE, m_CombineTrack); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CCombinePage, CPropertyPage) //{{AFX_MSG_MAP(CCombinePage) ON_WM_HSCROLL() ON_CBN_SELCHANGE(IDC_COMBO_COMBININGTYPE, OnSelChangeCombiningType) ON_EN_CHANGE(IDC_COMBINEFACTOR, OnChangeCombineFactor) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CCombinePage message handlers BOOL CCombinePage::OnInitDialog() { CPropertyPage::OnInitDialog(); if(m_pCombineOptions) { m_CombineOptions = *m_pCombineOptions; } m_CombineTrack.SetRange(1, 100); m_CombineTrack.SetPageSize(10); m_CombineTrack.SetPos(m_CombineOptions.uCombineFactor); InitValues(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CCombinePage::InitValues() { CString strVal; strVal.Format(TEXT("%d"), m_CombineOptions.uCombineFactor); m_edtCombineFactor.SetWindowText(strVal); m_cmbCombineType.ResetContent(); m_cmbCombineType.AddString(TEXT("Force")); m_cmbCombineType.AddString(TEXT("Force Similar")); m_cmbCombineType.AddString(TEXT("Try")); m_cmbCombineType.SetCurSel(m_CombineOptions.uCombineFlags); } void CCombinePage::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { CString strVal; m_bChange = TRUE; m_CombineOptions.uCombineFactor = m_CombineTrack.GetPos(); strVal.Format(TEXT("%d"), m_CombineOptions.uCombineFactor); m_edtCombineFactor.SetWindowText(strVal); m_bChange = FALSE; CPropertyPage::OnHScroll(nSBCode, nPos, pScrollBar); } void CCombinePage::OnSelChangeCombiningType() { m_CombineOptions.uCombineFlags = m_cmbCombineType.GetCurSel(); } void CCombinePage::OnChangeCombineFactor() { CString strVal; int nMin =0 , nMax = 0; if (!m_bChange) { m_CombineTrack.GetRange(nMin, nMax); m_edtCombineFactor.GetWindowText(strVal); m_CombineOptions.uCombineFactor = _ttoi(strVal); if (m_CombineOptions.uCombineFactor > (unsigned int)nMax) { m_bChange = TRUE; m_CombineOptions.uCombineFactor = nMax; strVal.Format(TEXT("%d"), nMax); m_edtCombineFactor.SetWindowText(strVal); m_bChange = FALSE; } else if (m_CombineOptions.uCombineFactor < (unsigned int)nMin) { m_bChange = TRUE; m_CombineOptions.uCombineFactor = nMin; strVal.Format(TEXT("%d"), nMin); m_edtCombineFactor.SetWindowText(strVal); m_bChange = FALSE; } m_CombineTrack.SetPos(m_CombineOptions.uCombineFactor); } } void CCombinePage::OnOK() { if ((m_pCombineOptions->uCombineFactor < 0) || (m_pCombineOptions->uCombineFactor > 100)) { MessageBox(TEXT("Please enter a number between 0 and 100 for the ") TEXT("combining quality factor."), TEXT("Invalid Value"), MB_OK); return; } memcpy(m_pCombineOptions, &m_CombineOptions, sizeof(COMBINEOPTIONS)); CPropertyPage::OnOK(); }