preferencesdlg.cpp
来自「管理项目进度工具的原代码」· C++ 代码 · 共 300 行
CPP
300 行
// PreferencesDlg.cpp : implementation file
//
#include "stdafx.h"
#include "todolist.h"
#include "PreferencesDlg.h"
#include "..\shared\winclasses.h"
#include "..\shared\wclassdefines.h"
#include "..\shared\enstring.h"
#include "..\shared\dialoghelper.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPreferencesDlg dialog
// default priority colors
const COLORREF PRIORITYLOWCOLOR = RGB(30, 225, 0);
const COLORREF PRIORITYHIGHCOLOR = RGB(255, 0, 0);
const char PATHDELIM = '>';
CPreferencesDlg::CPreferencesDlg(CShortcutManager* pShortcutMgr, UINT nMenuID,
const CContentMgr* pContentMgr, CWnd* pParent /*=NULL*/)
: CPreferencesDlgBase(IDD_PREFERENCES, pParent),
m_pageShortcuts(pShortcutMgr, nMenuID, FALSE), m_pageUI(pContentMgr)
{
CPreferencesDlgBase::AddPage(&m_pageGen);
CPreferencesDlgBase::AddPage(&m_pageMultiUser);
CPreferencesDlgBase::AddPage(&m_pageFile);
CPreferencesDlgBase::AddPage(&m_pageUI);
CPreferencesDlgBase::AddPage(&m_pageUITasklist);
CPreferencesDlgBase::AddPage(&m_pageUITasklistColors);
CPreferencesDlgBase::AddPage(&m_pageTask);
CPreferencesDlgBase::AddPage(&m_pageTaskDef);
CPreferencesDlgBase::AddPage(&m_pageExport);
CPreferencesDlgBase::AddPage(&m_pageTool);
CPreferencesDlgBase::AddPage(&m_pageShortcuts);
LoadPreferences();
}
CPreferencesDlg::~CPreferencesDlg()
{
}
void CPreferencesDlg::DoDataExchange(CDataExchange* pDX)
{
CPreferencesDlgBase::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPreferencesDlg)
DDX_Control(pDX, IDC_PAGES, m_tcPages);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPreferencesDlg, CPreferencesDlgBase)
//{{AFX_MSG_MAP(CPreferencesDlg)
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_HELP2, OnHelp)
ON_NOTIFY(TVN_SELCHANGED, IDC_PAGES, OnSelchangedPages)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPreferencesDlg message handlers
BOOL CPreferencesDlg::OnInitDialog()
{
CPreferencesDlgBase::OnInitDialog();
m_tcPages.SetIndent(0);
VERIFY(CreatePPHost(IDC_HOSTFRAME));
// add pages to tree control
AddPage(&m_pageGen, IDS_PREF_GEN);
AddPage(&m_pageMultiUser, IDS_PREF_MULTIUSER);
AddPage(&m_pageMultiUser, IDS_PREF_MULTIUSERFILE);
AddPage(&m_pageMultiUser, IDS_PREF_MULTIUSERSS);
AddPage(&m_pageFile, IDS_PREF_FILE);
AddPage(&m_pageFile, IDS_PREF_FILELOAD);
AddPage(&m_pageFile, IDS_PREF_FILEARCHIVE);
AddPage(&m_pageFile, IDS_PREF_FILENOTIFY);
AddPage(&m_pageFile, IDS_PREF_FILESAVE);
AddPage(&m_pageUI, IDS_PREF_UI);
AddPage(&m_pageUI, IDS_PREF_UIFILTERING);
AddPage(&m_pageUI, IDS_PREF_UITOOLBAR);
AddPage(&m_pageUI, IDS_PREF_UISORTING);
AddPage(&m_pageUI, IDS_PREF_UITABBAR);
AddPage(&m_pageUI, IDS_PREF_UICOMMENTS);
AddPage(&m_pageUITasklist, IDS_PREF_UITASKCOLUMNS);
AddPage(&m_pageUITasklist, IDS_PREF_UITASK);
AddPage(&m_pageUITasklistColors, IDS_PREF_UITASKCOLOR);
AddPage(&m_pageTask, IDS_PREF_TASK);
AddPage(&m_pageTask, IDS_PREF_TASKTIME);
AddPage(&m_pageTask, IDS_PREF_TASKCALCS);
AddPage(&m_pageTaskDef, IDS_PREF_TASKDEF);
AddPage(&m_pageTaskDef, IDS_PREF_TASKDEFINHERIT);
AddPage(&m_pageExport, IDS_PREF_EXPORT);
AddPage(&m_pageTool, IDS_PREF_TOOLS);
AddPage(&m_pageShortcuts, IDS_PREF_SHORTCUT);
SynchronizeTree();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CPreferencesDlg::SynchronizeTree()
{
HTREEITEM hti = NULL;
if (m_mapPP2HTI.Lookup(GetActivePage(), (void*&)hti) && hti)
m_tcPages.SelectItem(hti);
}
BOOL CPreferencesDlg::PreTranslateMessage(MSG* pMsg)
{
// special handling for hotkeys
if (CWinClasses::IsClass(pMsg->hwnd, WC_HOTKEY))
return FALSE;
// handle F1 help
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_F1)
{
OnHelp();
return TRUE;
}
return CPreferencesDlgBase::PreTranslateMessage(pMsg);
}
void CPreferencesDlg::OnHelp()
{
// who is the active page?
int nSel = GetActiveIndex();
CString sHelpPage = "pref.htm";
switch (nSel)
{
case PREFPAGE_GEN:
sHelpPage += "#gen";
break;
case PREFPAGE_MULTIUSER:
sHelpPage += "#multiuser";
break;
case PREFPAGE_FILE:
sHelpPage += "#file";
break;
case PREFPAGE_UI:
sHelpPage += "#ui";
break;
case PREFPAGE_UITASK:
sHelpPage += "#uitask";
break;
case PREFPAGE_TASK:
sHelpPage += "#tasks";
break;
case PREFPAGE_TASKDEF:
sHelpPage += "#taskdefs";
break;
case PREFPAGE_TOOL:
sHelpPage += "#tools";
break;
case PREFPAGE_SHORTCUT:
sHelpPage += "#shortcut";
break;
}
AfxGetApp()->WinHelp((DWORD)(LPCTSTR)sHelpPage);
}
void CPreferencesDlg::AddPage(CPreferencesPageBase* pPage, UINT nIDPath)
{
CString sPath;
sPath.LoadString(nIDPath);
if (FindPage(pPage) != -1)
{
HTREEITEM htiParent = TVI_ROOT; // default
int nFind = sPath.Find(PATHDELIM);
while (nFind != -1)
{
CString sParent = sPath.Left(nFind);
sPath = sPath.Mid(nFind + 1);
// see if parent already exists
HTREEITEM htiParentParent = htiParent;
htiParent = m_tcPages.GetChildItem(htiParentParent);
while (htiParent)
{
if (sParent.CompareNoCase(m_tcPages.GetItemText(htiParent)) == 0)
break;
htiParent = m_tcPages.GetNextItem(htiParent, TVGN_NEXT);
}
if (!htiParent)
{
htiParent = m_tcPages.InsertItem(sParent, htiParentParent);
// embolden root items
if (htiParentParent == TVI_ROOT)
m_tcPages.SetItemState(htiParent, TVIS_BOLD, TVIS_BOLD);
}
nFind = sPath.Find(PATHDELIM);
}
HTREEITEM hti = m_tcPages.InsertItem(sPath, htiParent); // whatever's left
m_tcPages.EnsureVisible(hti);
// embolden root items
if (htiParent == TVI_ROOT)
m_tcPages.SetItemState(hti, TVIS_BOLD, TVIS_BOLD);
// map both ways
m_tcPages.SetItemData(hti, (DWORD)pPage);
// don't remap the page if already done
HTREEITEM htiMap = NULL;
if (!m_mapPP2HTI.Lookup(pPage, (void*&)htiMap))
m_mapPP2HTI[(void*)pPage] = (void*)hti;
}
}
void CPreferencesDlg::OnSelchangedPages(NMHDR* /*pNMHDR*/, LRESULT* pResult)
{
HTREEITEM htiSel = m_tcPages.GetSelectedItem();
while (m_tcPages.ItemHasChildren(htiSel))
htiSel = m_tcPages.GetChildItem(htiSel);
CPreferencesPageBase* pPage = (CPreferencesPageBase*)m_tcPages.GetItemData(htiSel);
ASSERT (pPage);
if (pPage && CPreferencesDlgBase::SetActivePage(pPage))
{
// special handling:
// if we're activating the defaults page then update the
// priority colors
if (pPage == &m_pageTaskDef)
{
CDWordArray aColors;
m_pageUITasklistColors.GetPriorityColors(aColors);
m_pageTaskDef.SetPriorityColors(aColors);
}
// update caption
CString sCaption;
sCaption.Format(IDS_PREF_TITLE, GetItemPath(htiSel));
SetWindowText(sCaption);
}
m_tcPages.SetFocus();
*pResult = 0;
}
BOOL CPreferencesDlg::SetActivePage(int nPage)
{
if (CPreferencesDlgBase::SetActivePage(nPage))
{
SynchronizeTree();
return TRUE;
}
return FALSE;
}
CString CPreferencesDlg::GetItemPath(HTREEITEM hti)
{
CString sPath = m_tcPages.GetItemText(hti);
hti = m_tcPages.GetParentItem(hti);
while (hti)
{
sPath = m_tcPages.GetItemText(hti) + " > " + sPath;
hti = m_tcPages.GetParentItem(hti);
}
return sPath;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?