findtaskdlg.cpp
来自「管理项目进度工具的原代码」· C++ 代码 · 共 1,310 行 · 第 1/3 页
CPP
1,310 行
return m_bAllTasklists;
}
BOOL CFindTaskDlg::GetAutoSelectSingles()
{
if (GetSafeHwnd())
UpdateData();
return m_bAutoSelectSingles;
}
POSITION CFindTaskDlg::GetFirstResultPos() const
{
return m_mapResults.GetStartPosition();
}
BOOL CFindTaskDlg::GetNextResult(POSITION& pos, FTDRESULT& res) const
{
if (!pos)
return FALSE;
DWORD dwKey = 0;
m_mapResults.GetNextAssoc(pos, dwKey, res);
return TRUE;
}
int CFindTaskDlg::GetResultCount() const
{
return m_mapResults.GetCount();
}
int CFindTaskDlg::GetResultCount(int nTaskList) const
{
int nCount = 0;
POSITION pos = GetFirstResultPos();
while (pos)
{
FTDRESULT res;
GetNextResult(pos, res);
if (res.nTaskList == nTaskList)
nCount++;
}
return nCount;
}
int CFindTaskDlg::GetAllResults(CFTDResultsArray& results) const
{
int nRes = GetResultCount();
results.RemoveAll();
results.SetSize(nRes);
while (nRes--)
m_mapResults.Lookup((DWORD)(nRes + 1), results[nRes]);
return results.GetSize();
}
BOOL CFindTaskDlg::GetIncludeDone()
{
if (GetSafeHwnd())
UpdateData();
return m_bIncludeDone;
}
BOOL CFindTaskDlg::GetSearchResults()
{
if (GetSafeHwnd())
UpdateData();
return m_bSearchResults;
}
CString CFindTaskDlg::GetText()
{
switch (m_nFindOption)
{
case FW_TITLECOMMENTS:
return m_pageTitleComments.GetText();
case FW_ALLOCBY:
return m_pageAllocBy.GetText();
case FW_STATUS:
return m_pageStatus.GetText();
case FW_CREATEDBY:
return m_pageCreatedBy.GetText();
case FW_EXTERNALID:
return m_pageExtID.GetText();
case FW_VERSION:
return m_pageVersion.GetText();
}
// all else
ASSERT(0);
return "";
}
int CFindTaskDlg::GetItems(CStringArray& aItems)
{
switch (m_nFindOption)
{
case FW_CATEGORY:
return m_pageCategory.GetItems(aItems);
case FW_ALLOCTO:
return m_pageAllocTo.GetItems(aItems);
}
// all else
ASSERT(0);
return 0;
}
BOOL CFindTaskDlg::GetMatchAllItems()
{
switch (m_nFindOption)
{
case FW_TITLECOMMENTS:
return m_pageTitleComments.GetMatchAllItems();
case FW_CATEGORY:
return m_pageCategory.GetMatchAllItems();
case FW_ALLOCTO:
return m_pageAllocTo.GetMatchAllItems();
}
// all else
ASSERT(0);
return 0;
}
BOOL CFindTaskDlg::GetMatchCase()
{
switch (m_nFindOption)
{
case FW_TITLECOMMENTS:
return m_pageTitleComments.GetMatchCase();
case FW_ALLOCBY:
return m_pageAllocBy.GetMatchCase();
case FW_STATUS:
return m_pageStatus.GetMatchCase();
case FW_CREATEDBY:
return m_pageCreatedBy.GetMatchCase();
case FW_EXTERNALID:
return m_pageExtID.GetMatchCase();
case FW_VERSION:
return FALSE;
}
// all else
ASSERT(0);
return FALSE;
}
BOOL CFindTaskDlg::GetMatchWholeWord()
{
switch (m_nFindOption)
{
case FW_TITLECOMMENTS:
return m_pageTitleComments.GetMatchWholeWord();
case FW_ALLOCBY:
return m_pageAllocBy.GetMatchWholeWord();
case FW_STATUS:
return m_pageStatus.GetMatchWholeWord();
case FW_CREATEDBY:
return m_pageCreatedBy.GetMatchWholeWord();
case FW_EXTERNALID:
return m_pageExtID.GetMatchWholeWord();
case FW_VERSION:
return m_pageVersion.GetMatchWholeWord();
}
// all else
ASSERT(0);
return FALSE;
}
FIND_WHAT CFindTaskDlg::GetFindWhat()
{
if (GetSafeHwnd())
UpdateData();
return m_nFindOption;
}
BOOL CFindTaskDlg::GetRange(COleDateTime& dateFrom, COleDateTime& dateTo)
{
switch (m_nFindOption)
{
case FW_CREATIONDATE:
m_pageCreationDate.GetDateRange(dateFrom, dateTo);
return TRUE;
case FW_STARTDATE:
m_pageStartDate.GetDateRange(dateFrom, dateTo);
return TRUE;
case FW_DUEDATE:
m_pageDueDate.GetDateRange(dateFrom, dateTo);
return TRUE;
case FW_DONEDATE:
m_pageDoneDate.GetDateRange(dateFrom, dateTo);
return TRUE;
case FW_LASTMOD:
m_pageLastMod.GetDateRange(dateFrom, dateTo);
return TRUE;
}
// all else
ASSERT(0);
return FALSE;
}
BOOL CFindTaskDlg::GetRange(int& nFrom, int& nTo)
{
switch (m_nFindOption)
{
case FW_PRIORITY:
m_pagePriority.GetRange(nFrom, nTo);
return TRUE;
case FW_PERCENTDONE:
m_pagePercent.GetNumberRange(nFrom, nTo);
return TRUE;
case FW_TASKID:
m_pageTaskID.GetNumberRange(nFrom, nTo);
return TRUE;
case FW_RISK:
m_pageRisk.GetRange(nFrom, nTo);
return TRUE;
}
// all else
ASSERT(0);
return FALSE;
}
BOOL CFindTaskDlg::GetRange(double& dFrom, double& dTo)
{
switch (m_nFindOption)
{
case FW_TIMEEST:
m_pageTimeEst.GetNumberRange(dFrom, dTo);
return TRUE;
case FW_TIMESPENT:
m_pageTimeSpent.GetNumberRange(dFrom, dTo);
return TRUE;
case FW_COST:
m_pageCost.GetNumberRange(dFrom, dTo);
return TRUE;
}
// all else
ASSERT(0);
return FALSE;
}
void CFindTaskDlg::RefreshSearch()
{
ASSERT (GetSafeHwnd());
OnFind();
}
void CFindTaskDlg::OnFind()
{
// add typed text to combobox
UpdateData();
// notify parent
GetParent()->PostMessage(WM_FTD_FIND);
// clear results
m_mapResults.RemoveAll();
m_lcResults.DeleteAllItems();
m_lcResults.SetFocus();
m_sResultsLabel.Format(IDS_FTD_SOMERESULTS, 0);
UpdateData(FALSE);
// update field column
InitFieldColumn();
// update 'search results' button' state
m_toolbar.RefreshButtonStates();
// disable 'select all' button
GetDlgItem(IDC_SELECTALL)->EnableWindow(FALSE);
}
void CFindTaskDlg::OnClose()
{
CDialog::OnClose();
// hide
ShowWindow(SW_HIDE);
// notify parent
GetParent()->SendMessage(WM_FTD_CLOSE);
}
void CFindTaskDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
ResizeDlg(cx, cy);
if (m_toolbar.GetSafeHwnd())
m_toolbar.RefreshButtonStates();
}
void CFindTaskDlg::ResizeDlg(int cx, int cy)
{
if (m_lcResults.GetSafeHwnd())
{
if (!cx && !cy)
{
CRect rClient;
GetClientRect(rClient);
cx = rClient.right;
cy = rClient.bottom;
// check again
if (!cx && !cy)
return;
}
// we compare the new size with the lower right hand corner
// of the gripper list
CRect rect;
GetDlgItem(IDC_GRIPPER)->GetWindowRect(rect);
ScreenToClient(rect);
int nXOffset = cx - rect.right;
int nYOffset = cy - rect.bottom;
BOOL bDockedBelow = (m_dockMgr.GetDockPos() == DMP_BELOW);
{
CDeferWndMove dwm(10);
CRect rHDiv = dwm.ResizeCtrl(this, IDC_HDIVIDER, nXOffset);
CRect rVDiv = dwm.ResizeCtrl(this, IDC_VDIVIDER);
rVDiv = dwm.ResizeCtrl(this, IDC_VDIVIDER, 0, cy - rVDiv.bottom - 10);
dwm.OffsetCtrl(this, IDC_GRIPPER, nXOffset, nYOffset);
// move 'select all', results and other assorted items
// depending on where we are docked
CRect rSelAll = dwm.ResizeCtrl(this, IDC_SELECTALL);
if (bDockedBelow)
{
nXOffset = rVDiv.right - rSelAll.left + 10;
nYOffset = rVDiv.top - rSelAll.top;
}
else
{
nXOffset = rHDiv.left - rSelAll.left;
nYOffset = rHDiv.top - rSelAll.top + 10;
}
dwm.OffsetCtrl(this, IDC_SELECTALL, nXOffset, nYOffset);
dwm.OffsetCtrl(this, IDC_RESULTSLABEL, nXOffset, nYOffset);
CRect rAuto = dwm.OffsetCtrl(this, IDC_AUTOSELECTSINGLES);
rAuto = dwm.OffsetCtrl(this, IDC_AUTOSELECTSINGLES, nXOffset, cy - rAuto.bottom - 10);
CRect rResults = dwm.OffsetCtrl(this, IDC_RESULTS, nXOffset, nYOffset);
rResults.right = cx - 10;
rResults.bottom = rAuto.top - 10;
dwm.MoveWindow(&m_lcResults, rResults);
}
// hide the gripper if we are maximized
GetDlgItem(IDC_GRIPPER)->ShowWindow(m_dockMgr.Maximized() ? SW_HIDE : SW_SHOW);
// hide appropriate divider
GetDlgItem(IDC_HDIVIDER)->ShowWindow(bDockedBelow ? SW_HIDE : SW_SHOW);
GetDlgItem(IDC_VDIVIDER)->ShowWindow(bDockedBelow ? SW_SHOW : SW_HIDE);
// resize the column headers to fit the available space
// provided it does not get less than 100
int nFixed = m_lcResults.GetColumnWidth(COL_PATH) + m_lcResults.GetColumnWidth(COL_MATCH);
if (!(m_lcResults.GetStyle() & WS_VSCROLL))
nFixed += GetSystemMetrics(SM_CXVSCROLL);
m_lcResults.GetClientRect(rect);
m_lcResults.SetColumnWidth(COL_TASK, max(100, rect.Width() - nFixed));
}
}
void CFindTaskDlg::OnItemActivated(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
ASSERT (pNMListView->iItem >= 0);
FTDRESULT res;
DWORD dwKey = m_lcResults.GetItemData(pNMListView->iItem);
if (dwKey != HEADERROW && m_mapResults.Lookup(dwKey, res))
GetParent()->SendMessage(WM_FTD_SELECTRESULT, dwKey, (LPARAM)&res);
*pResult = 0;
}
void CFindTaskDlg::OnDestroy()
{
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?