PageSearch.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:6k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // pagesearch.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "styler.h"
  5. #include "pagesearch.h"
  6. #include "MainFrm.h"
  7. #include "ComboBoxSearch.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. CPageSearch::CEngineArray CPageSearch::m_arrEngines;
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CPageSearch property page
  16. IMPLEMENT_DYNCREATE(CPageSearch, COptionsPage)
  17. CPageSearch::CPageSearch() : COptionsPage(CPageSearch::IDD)
  18. {
  19. //{{AFX_DATA_INIT(CPageSearch)
  20. // NOTE: the ClassWizard will add member initialization here
  21. //}}AFX_DATA_INIT
  22. }
  23. CPageSearch::~CPageSearch()
  24. {
  25. }
  26. void CPageSearch::DoDataExchange(CDataExchange* pDX)
  27. {
  28. COptionsPage::DoDataExchange(pDX);
  29. //{{AFX_DATA_MAP(CPageSearch)
  30. DDX_Control(pDX, IDC_LIST_SEARCH, m_wndSearch);
  31. //}}AFX_DATA_MAP
  32. }
  33. BEGIN_MESSAGE_MAP(CPageSearch, COptionsPage)
  34. //{{AFX_MSG_MAP(CPageSearch)
  35. ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
  36. ON_BN_CLICKED(IDC_BUTTON_EDIT, OnButtonEdit)
  37. ON_BN_CLICKED(IDC_BUTTON_REMOVE, OnButtonRemove)
  38. ON_NOTIFY(NM_DBLCLK, IDC_LIST_SEARCH, OnDblclkListSearch)
  39. //}}AFX_MSG_MAP
  40. END_MESSAGE_MAP()
  41. /////////////////////////////////////////////////////////////////////////////
  42. // CPageSearch message handlers
  43. void CPageSearch::Load()
  44. {
  45. CString strPath = GetModuleDir();
  46. TCHAR chReturn[255];
  47. CString strSearch;
  48. int nIndex = 0;
  49. strSearch.Format(_T("S%i"), nIndex);
  50. while (GetPrivateProfileString(_T("QuickSearch"), strSearch, _T(""), chReturn, 254, strPath + _T("QuickSearch.ini")) > 0)
  51. {
  52. ENGINE engine;
  53. engine.strSearch  = chReturn;
  54. strSearch.Format(_T("N%i"), nIndex);
  55. if (GetPrivateProfileString(_T("QuickSearch"), strSearch, _T(""), chReturn, 254, strPath + _T("QuickSearch.ini")) > 0)
  56. engine.strKeyword = chReturn;
  57. strSearch.Format(_T("T%i"), nIndex);
  58. if (GetPrivateProfileString(_T("QuickSearch"), strSearch, _T(""), chReturn, 254, strPath + _T("QuickSearch.ini")) > 0)
  59. engine.strTitle = chReturn; else engine.strTitle = engine.strKeyword;
  60. if (!engine.strSearch.IsEmpty() && !engine.strTitle.IsEmpty())
  61. {
  62. m_arrEngines.Add(engine);
  63. }
  64. strSearch.Format(_T("S%i"), ++nIndex);
  65. }
  66. }
  67. void CPageSearch::Save()
  68. {
  69. CString strPath = GetModuleDir();
  70. CString str;
  71. if (PathFileExists(strPath + _T("QuickSearch.ini")))
  72. DeleteFile(strPath + _T("QuickSearch.ini"));
  73. for (int i = 0; i < m_arrEngines.GetSize(); i++)
  74. {
  75. ENGINE& engine = m_arrEngines[i];
  76. str.Format(_T("S%i"), i);
  77. WritePrivateProfileString(_T("QuickSearch"), str, engine.strSearch, strPath + _T("QuickSearch.ini"));
  78. str.Format(_T("N%i"), i);
  79. WritePrivateProfileString(_T("QuickSearch"), str, engine.strKeyword, strPath + _T("QuickSearch.ini"));
  80. str.Format(_T("T%i"), i);
  81. WritePrivateProfileString(_T("QuickSearch"), str, engine.strTitle, strPath + _T("QuickSearch.ini"));
  82. }
  83. }
  84. BOOL CPageSearch::OnInitDialog() 
  85. {
  86. COptionsPage::OnInitDialog();
  87. m_wndSearch.SetExtendedStyle(m_wndSearch.GetExtendedStyle() | LVS_EX_FULLROWSELECT);
  88. m_wndSearch.InsertColumn(0, _T("Title"), LVCFMT_LEFT, 184);
  89. m_wndSearch.InsertColumn(1, _T("Keyword"), LVCFMT_LEFT, 150);
  90. RefreshList();
  91. return TRUE;  // return TRUE unless you set the focus to a control
  92.               // EXCEPTION: OCX Property Pages should return FALSE
  93. }
  94. void CPageSearch::RefreshList()
  95. {
  96. m_wndSearch.DeleteAllItems();
  97. for (int i = 0; i < m_arrEngines.GetSize(); i++)
  98. {
  99. ENGINE& engine = m_arrEngines[i];
  100. int nIndex = m_wndSearch.InsertItem(i, engine.strTitle);
  101. m_wndSearch.SetItemText(nIndex, 1, engine.strKeyword);
  102. m_wndSearch.SetItemData(nIndex, i);
  103. }
  104. CComboBoxSearch* pCombo = (CComboBoxSearch*) GetMainFrame()->GetCommandBars()->FindControl(xtpControlComboBox, ID_GOTO_SEARCH, FALSE, FALSE);
  105. ASSERT(pCombo);
  106. UpdateComboBox(pCombo);
  107. }
  108. void CPageSearch::OnButtonAdd() 
  109. {
  110. ENGINE engine;
  111. CSearchDialog sd(engine);
  112. if (sd.DoModal() == IDOK)
  113. {
  114. if (sd.m_engine.strTitle != "" && sd.m_engine.strSearch != "")
  115. {
  116. m_arrEngines.Add(sd.m_engine);
  117. RefreshList();
  118. }
  119. }
  120. }
  121. void CPageSearch::OnButtonEdit() 
  122. {
  123. int nItem = m_wndSearch.GetNextItem(-1, LVNI_SELECTED);
  124. if (nItem != -1)
  125. {
  126. int dwData = (int)m_wndSearch.GetItemData(nItem);
  127. if (dwData >= 0 && dwData < m_arrEngines.GetSize())
  128. {
  129. ENGINE engine = m_arrEngines[dwData];
  130. CSearchDialog sd(engine);
  131. if (sd.DoModal() == IDOK)
  132. {
  133. if (sd.m_engine.strTitle != "" && sd.m_engine.strSearch != "")
  134. {
  135. m_arrEngines[dwData] = sd.m_engine;
  136. RefreshList();
  137. }
  138. }
  139. }
  140. }
  141. }
  142. void CPageSearch::OnButtonRemove() 
  143. {
  144. int nItem = m_wndSearch.GetNextItem(-1, LVNI_SELECTED);
  145. if (nItem != -1)
  146. {
  147. int dwData = (int)m_wndSearch.GetItemData(nItem);
  148. if (dwData >= 0 && dwData < m_arrEngines.GetSize())
  149. {
  150. m_arrEngines.RemoveAt(dwData);
  151. RefreshList();
  152. }
  153. }
  154. }
  155. void CPageSearch::OnDblclkListSearch(NMHDR* /*pNMHDR*/, LRESULT* pResult) 
  156. {
  157. OnButtonEdit();
  158. *pResult = 0;
  159. }
  160. void CPageSearch::UpdateComboBox(CComboBoxSearch *pCombo)
  161. {
  162. pCombo->ResetContent();
  163. CString strText = pCombo->GetEditText();
  164. for (int i = 0; i < m_arrEngines.GetSize(); i++)
  165. {
  166. ENGINE& engine = m_arrEngines[i];
  167. pCombo->AddString(engine.strTitle);
  168. }
  169. pCombo->SetCurSel(pCombo->m_nCurrentEngine);
  170. if (!strText.IsEmpty()) pCombo->SetEditText(strText);
  171. }
  172. // SearchDialog
  173. CSearchDialog::CSearchDialog(CPageSearch::ENGINE& engine, CWnd* pParent /*=NULL*/)
  174. : CDialog(CSearchDialog::IDD, pParent)
  175. {
  176. m_engine = engine;
  177. }
  178. void CSearchDialog::DoDataExchange(CDataExchange* pDX)
  179. {
  180. CDialog::DoDataExchange(pDX);
  181. //{{AFX_DATA_MAP(CSearchDialog)
  182. //}}AFX_DATA_MAP
  183. DDX_Text(pDX, IDC_EDIT_TITLE, m_engine.strTitle);
  184. DDX_Text(pDX, IDC_EDIT_SEARCH, m_engine.strSearch);
  185. DDX_Text(pDX, IDC_EDIT_KEYWORD, m_engine.strKeyword);
  186. }
  187. void CSearchDialog::OnOK()
  188. {
  189. UpdateData();
  190. if(m_engine.strSearch.Find(_T("%s")) < 0)
  191. {
  192. AfxMessageBox(IDS_NEEDKEYSTRING);
  193. return;
  194. }
  195. CDialog::OnOK();
  196. }
  197. BEGIN_MESSAGE_MAP(CSearchDialog, CDialog)
  198. //{{AFX_MSG_MAP(CSearchDialog)
  199. //}}AFX_MSG_MAP
  200. END_MESSAGE_MAP()