findprioritypage.cpp

来自「管理项目进度工具的原代码」· C++ 代码 · 共 170 行

CPP
170
字号
// FindPriorityPage.cpp : implementation file
//

#include "stdafx.h"
#include "todolist.h"
#include "FindPriorityPage.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CFindPriorityPage property page

enum { THISPRIORITY, MORETHAN, LESSTHAN, BETWEEN };

IMPLEMENT_DYNCREATE(CFindPriorityPage, CPropertyPage)

CFindPriorityPage::CFindPriorityPage() : CPropertyPage(CFindPriorityPage::IDD)
{
	//{{AFX_DATA_INIT(CFindPriorityPage)
	m_nPriorityOption = MORETHAN;
	m_nMoreThanPriority = 0;
	m_nLessThanPriority = 0;
	m_nStartPriority = 0;
	m_nEndPriority = 0;
	m_nThisPriority = 0;
	//}}AFX_DATA_INIT

}

CFindPriorityPage::~CFindPriorityPage()
{
}

void CFindPriorityPage::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFindPriorityPage)
	DDX_Radio(pDX, IDC_THIS, m_nPriorityOption);
	//}}AFX_DATA_MAP
	DDX_CBPriority(pDX, IDC_MORETHANPRIORITY, m_nMoreThanPriority);
	DDX_CBPriority(pDX, IDC_LESSTHANPRIORITY, m_nLessThanPriority);
	DDX_CBPriority(pDX, IDC_PRIORITYSTART, m_nStartPriority);
	DDX_CBPriority(pDX, IDC_PRIORITYEND, m_nEndPriority);
	DDX_CBPriority(pDX, IDC_THISPRIORITY, m_nThisPriority);
	DDX_Control(pDX, IDC_MORETHANPRIORITY, m_cbMoreThanPriority);
	DDX_Control(pDX, IDC_LESSTHANPRIORITY, m_cbLessThanPriority);
	DDX_Control(pDX, IDC_PRIORITYSTART, m_cbStartPriority);
	DDX_Control(pDX, IDC_PRIORITYEND, m_cbEndPriority);
	DDX_Control(pDX, IDC_THISPRIORITY, m_cbThisPriority);
}


BEGIN_MESSAGE_MAP(CFindPriorityPage, CPropertyPage)
	//{{AFX_MSG_MAP(CFindPriorityPage)
	ON_BN_CLICKED(IDC_MORETHAN, OnChangeOption)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_LESSTHAN, OnChangeOption)
	ON_BN_CLICKED(IDC_BETWEEN, OnChangeOption)
	ON_BN_CLICKED(IDC_THIS, OnChangeOption)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFindPriorityPage message handlers

BOOL CFindPriorityPage::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();

	CString sRegKey = GetRegKey();
	
	m_nPriorityOption = AfxGetApp()->GetProfileInt(sRegKey, "LastNumOption", m_nPriorityOption);
	m_nThisPriority = AfxGetApp()->GetProfileInt(sRegKey, "LastThisPriority", m_nThisPriority);
	m_nMoreThanPriority = AfxGetApp()->GetProfileInt(sRegKey, "LastMoreThanPriority", m_nMoreThanPriority);
	m_nLessThanPriority = AfxGetApp()->GetProfileInt(sRegKey, "LastLessThanPriority", m_nLessThanPriority);
	m_nStartPriority = AfxGetApp()->GetProfileInt(sRegKey, "LastStartPriority", m_nStartPriority);
	m_nEndPriority = AfxGetApp()->GetProfileInt(sRegKey, "LastEndPriority", m_nEndPriority);

	UpdateData(FALSE);
	
	EnableControls(m_nPriorityOption);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CFindPriorityPage::SetPriorityColors(const CDWordArray& aColors)
{
	m_cbThisPriority.SetColors(aColors);
	m_cbLessThanPriority.SetColors(aColors);
	m_cbMoreThanPriority.SetColors(aColors);
	m_cbEndPriority.SetColors(aColors);
	m_cbStartPriority.SetColors(aColors);
}

void CFindPriorityPage::GetRange(int& nFrom, int& nTo)
{
	if (GetSafeHwnd())
		UpdateData();

	switch (m_nPriorityOption)
	{
	case THISPRIORITY:
		nFrom = m_nThisPriority;
		nTo = nFrom;
		break;
		
	case MORETHAN:
		nFrom = m_nMoreThanPriority + 1;
		nTo = INT_MAX;
		break;
		
	case LESSTHAN:
		nFrom = INT_MIN;
		nTo = m_nLessThanPriority - 1;
		break;
		
	case BETWEEN:
		nFrom = m_nStartPriority;
		nTo = m_nEndPriority;
		break;
	}
}

void CFindPriorityPage::OnChangeOption() 
{
	UpdateData();
	EnableControls(m_nPriorityOption);
}

void CFindPriorityPage::EnableControls(int nOption)
{
	GetDlgItem(IDC_THISPRIORITY)->EnableWindow(nOption == THISPRIORITY);
	GetDlgItem(IDC_MORETHANPRIORITY)->EnableWindow(nOption == MORETHAN);
	GetDlgItem(IDC_LESSTHANPRIORITY)->EnableWindow(nOption == LESSTHAN);
	GetDlgItem(IDC_PRIORITYSTART)->EnableWindow(nOption == BETWEEN);
	GetDlgItem(IDC_PRIORITYEND)->EnableWindow(nOption == BETWEEN);
}

CString CFindPriorityPage::GetRegKey() const
{
	CString sKey, sTitle;
	GetWindowText(sTitle);

	if (sTitle.IsEmpty())
		sTitle = m_psp.pszTitle;

	sKey.Format("FindTasks\\%s", sTitle);

	return sKey;
}

void CFindPriorityPage::OnDestroy() 
{
	CPropertyPage::OnDestroy();

	CString sRegKey = GetRegKey();
	
	AfxGetApp()->WriteProfileInt(sRegKey, "LastNumOption", m_nPriorityOption);
	AfxGetApp()->WriteProfileInt(sRegKey, "LastThisPriority", m_nThisPriority);
	AfxGetApp()->WriteProfileInt(sRegKey, "LastMoreThanPriority", m_nMoreThanPriority);
	AfxGetApp()->WriteProfileInt(sRegKey, "LastLessThanPriority", m_nLessThanPriority);
	AfxGetApp()->WriteProfileInt(sRegKey, "LastStartPriority", m_nStartPriority);
	AfxGetApp()->WriteProfileInt(sRegKey, "LastEndPriority", m_nEndPriority);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?