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

对话框与窗口

开发平台:

Visual C++

  1. // TaskPageButtons.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "VistaTaskDialog.h"
  5. #include "TaskSheetProperties.h"
  6. #include "TaskPageButtons.h"
  7. #include "TaskEditButtonDlg.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CTaskPageButtons property page
  15. IMPLEMENT_DYNCREATE(CTaskPageButtons, CPropertyPage)
  16. CTaskPageButtons::CTaskPageButtons() : CPropertyPage(CTaskPageButtons::IDD)
  17. {
  18. //{{AFX_DATA_INIT(CTaskPageButtons)
  19. m_bCancel = FALSE;
  20. m_bClose = FALSE;
  21. m_bShowIcons = TRUE;
  22. m_bNo = FALSE;
  23. m_bOk = FALSE;
  24. m_bRetry = FALSE;
  25. m_bUseLinks = FALSE;
  26. m_bYes = FALSE;
  27. //}}AFX_DATA_INIT
  28. XTPResourceManager()->LoadString(&m_strOk, XTP_IDS_TASK_OK);
  29. XTPDrawHelpers()->StripMnemonics(m_strOk);
  30. XTPResourceManager()->LoadString(&m_strYes, XTP_IDS_TASK_YES);
  31. XTPDrawHelpers()->StripMnemonics(m_strYes);
  32. XTPResourceManager()->LoadString(&m_strNo, XTP_IDS_TASK_NO);
  33. XTPDrawHelpers()->StripMnemonics(m_strNo);
  34. XTPResourceManager()->LoadString(&m_strCancel, XTP_IDS_TASK_CANCEL);
  35. XTPDrawHelpers()->StripMnemonics(m_strCancel);
  36. XTPResourceManager()->LoadString(&m_strRetry, XTP_IDS_TASK_RETRY);
  37. XTPDrawHelpers()->StripMnemonics(m_strRetry);
  38. XTPResourceManager()->LoadString(&m_strClose, XTP_IDS_TASK_CLOSE);
  39. XTPDrawHelpers()->StripMnemonics(m_strClose);
  40. }
  41. CTaskPageButtons::~CTaskPageButtons()
  42. {
  43. }
  44. void CTaskPageButtons::DoDataExchange(CDataExchange* pDX)
  45. {
  46. CPropertyPage::DoDataExchange(pDX);
  47. //{{AFX_DATA_MAP(CTaskPageButtons)
  48. DDX_Control(pDX, IDC_BTN_REMOVE, m_btnRemove);
  49. DDX_Control(pDX, IDC_BTN_EDIT, m_btnEdit);
  50. DDX_Control(pDX, IDC_BTN_ADD, m_btnAdd);
  51. DDX_Control(pDX, IDC_LIST_CUSTOM, m_listCustom);
  52. DDX_Control(pDX, IDC_COMBO_DEFAULT, m_comboDefault);
  53. DDX_Check(pDX, IDC_CHK_CANCEL, m_bCancel);
  54. DDX_Check(pDX, IDC_CHK_CLOSE, m_bClose);
  55. DDX_Check(pDX, IDC_CHK_SHOWICONS, m_bShowIcons);
  56. DDX_Check(pDX, IDC_CHK_NO, m_bNo);
  57. DDX_Check(pDX, IDC_CHK_OK, m_bOk);
  58. DDX_Check(pDX, IDC_CHK_RETRY, m_bRetry);
  59. DDX_Check(pDX, IDC_CHK_USELINKS, m_bUseLinks);
  60. DDX_Check(pDX, IDC_CHK_YES, m_bYes);
  61. //}}AFX_DATA_MAP
  62. }
  63. BEGIN_MESSAGE_MAP(CTaskPageButtons, CPropertyPage)
  64. //{{AFX_MSG_MAP(CTaskPageButtons)
  65. ON_BN_CLICKED(IDC_CHK_USELINKS, OnUpdateData)
  66. ON_BN_CLICKED(IDC_CHK_OK, OnChkOk)
  67. ON_BN_CLICKED(IDC_CHK_YES, OnChkYes)
  68. ON_BN_CLICKED(IDC_CHK_CANCEL, OnChkCancel)
  69. ON_BN_CLICKED(IDC_CHK_NO, OnChkNo)
  70. ON_BN_CLICKED(IDC_CHK_RETRY, OnChkRetry)
  71. ON_BN_CLICKED(IDC_CHK_CLOSE, OnChkClose)
  72. ON_BN_CLICKED(IDC_BTN_ADD, OnBtnAdd)
  73. ON_BN_CLICKED(IDC_BTN_EDIT, OnBtnEdit)
  74. ON_BN_CLICKED(IDC_BTN_REMOVE, OnBtnRemove)
  75. ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_CUSTOM, OnItemChangedListCustom)
  76. ON_BN_CLICKED(IDC_CHK_SHOWICONS, OnUpdateData)
  77. ON_CBN_SELENDOK(IDC_COMBO_DEFAULT, OnUpdateData)
  78. ON_WM_DESTROY()
  79. //}}AFX_MSG_MAP
  80. END_MESSAGE_MAP()
  81. /////////////////////////////////////////////////////////////////////////////
  82. // CTaskPageButtons message handlers
  83. void CTaskPageButtons::AddCommonButton(int nID)
  84. {
  85. switch (nID)
  86. {
  87. case IDOK:
  88. m_pDlgParent->UpdateButtonMap(
  89. m_strOk, IDOK, &m_comboDefault, m_bOk);
  90. break;
  91. case IDYES:
  92. m_pDlgParent->UpdateButtonMap(
  93. m_strYes, IDYES, &m_comboDefault, m_bYes);
  94. break;
  95. case IDCANCEL:
  96. m_pDlgParent->UpdateButtonMap(
  97. m_strCancel, IDCANCEL, &m_comboDefault, m_bCancel);
  98. break;
  99. case IDNO:
  100. m_pDlgParent->UpdateButtonMap(
  101. m_strNo, IDNO, &m_comboDefault, m_bNo);
  102. break;
  103. case IDRETRY:
  104. m_pDlgParent->UpdateButtonMap(
  105. m_strRetry, IDRETRY, &m_comboDefault, m_bRetry);
  106. break;
  107. case IDCLOSE:
  108. m_pDlgParent->UpdateButtonMap(
  109. m_strClose, IDCLOSE, &m_comboDefault, m_bClose);
  110. break;
  111. }
  112. }
  113. void CTaskPageButtons::OnChkOk()
  114. {
  115. UpdateData();
  116. AddCommonButton(IDOK);
  117. }
  118. void CTaskPageButtons::OnChkYes()
  119. {
  120. UpdateData();
  121. AddCommonButton(IDYES);
  122. }
  123. void CTaskPageButtons::OnChkCancel()
  124. {
  125. UpdateData();
  126. AddCommonButton(IDCANCEL);
  127. }
  128. void CTaskPageButtons::OnChkNo()
  129. {
  130. UpdateData();
  131. AddCommonButton(IDNO);
  132. }
  133. void CTaskPageButtons::OnChkRetry()
  134. {
  135. UpdateData();
  136. AddCommonButton(IDRETRY);
  137. }
  138. void CTaskPageButtons::OnChkClose()
  139. {
  140. UpdateData();
  141. AddCommonButton(IDCLOSE);
  142. }
  143. void CTaskPageButtons::OnUpdateData()
  144. {
  145. UpdateData();
  146. GetDlgItem(IDC_CHK_SHOWICONS)->EnableWindow(m_bUseLinks);
  147. }
  148. void CTaskPageButtons::OnBtnAdd() 
  149. {
  150. // TODO: Add your control notification handler code here
  151. CTaskEditButtonDlg dlg(&m_comboDefault, FALSE, m_pDlgParent);
  152. if (dlg.DoModal() == IDOK)
  153. {
  154. CString strID;
  155. strID.Format(_T("%d"), dlg.m_nID);
  156. int nIndex = m_listCustom.GetItemCount();
  157. m_listCustom.InsertItem(nIndex, dlg.m_strText);
  158. m_listCustom.SetItemText(nIndex, 1, strID);
  159. }
  160. m_listCustom.SetFocus();
  161. }
  162. void CTaskPageButtons::OnBtnEdit() 
  163. {
  164. // TODO: Add your control notification handler code here
  165. POSITION pos = m_listCustom.GetFirstSelectedItemPosition();
  166. if (pos)
  167. {
  168. CTaskEditButtonDlg dlg(&m_comboDefault, TRUE, m_pDlgParent);
  169. int nIndex = m_listCustom.GetNextSelectedItem(pos);
  170. dlg.m_strText = m_listCustom.GetItemText(nIndex, 0);
  171. dlg.m_nID = _ttoi(m_listCustom.GetItemText(nIndex, 1));
  172. if (dlg.DoModal() == IDOK)
  173. {
  174. CString strID;
  175. strID.Format(_T("%d"), dlg.m_nID);
  176. m_listCustom.SetItemText(nIndex, 0, dlg.m_strText);
  177. m_listCustom.SetItemText(nIndex, 1, strID);
  178. }
  179. }
  180. m_listCustom.SetFocus();
  181. }
  182. void CTaskPageButtons::OnBtnRemove() 
  183. {
  184. // TODO: Add your control notification handler code here
  185. POSITION pos = m_listCustom.GetFirstSelectedItemPosition();
  186. if (pos)
  187. {
  188. if (::MessageBox(m_hWnd, _T("Are you sure you want to delete this item?"),
  189. _T("Confirm Delete"), MB_YESNO|MB_ICONQUESTION) == IDYES)
  190. {
  191. int nIndex = m_listCustom.GetNextSelectedItem(pos);
  192. if (nIndex != LB_ERR)
  193. {
  194. int nID = _ttoi(m_listCustom.GetItemText(nIndex, 1));
  195. CString strText = m_listCustom.GetItemText(nIndex, 0);
  196. m_pDlgParent->UpdateButtonMap(
  197. strText, nID, &m_comboDefault, FALSE);
  198. m_listCustom.DeleteItem(nIndex);
  199. }
  200. }
  201. }
  202. m_listCustom.SetFocus();
  203. }
  204. void CTaskPageButtons::OnItemChangedListCustom(NMHDR* /*pNMHDR*/, LRESULT* pResult) 
  205. {
  206. EnableButtons();
  207. *pResult = 0;
  208. }
  209. void CTaskPageButtons::InsertItem(CString strText, UINT nID)
  210. {
  211. CString strID;
  212. strID.Format(_T("%d"), nID);
  213. int nIndex = m_listCustom.GetItemCount();
  214. m_listCustom.InsertItem(nIndex, strText);
  215. m_listCustom.SetItemText(nIndex, 1, strID);
  216. m_pDlgParent->UpdateButtonMap(
  217. strText, nID, &m_comboDefault, TRUE);
  218. }
  219. void CTaskPageButtons::InsertItem(UINT nString, UINT nID)
  220. {
  221. CString strText;
  222. strText.LoadString(nString);
  223. InsertItem(strText, nID);
  224. }
  225. BOOL CTaskPageButtons::OnInitDialog() 
  226. {
  227. CPropertyPage::OnInitDialog();
  228. // TODO: Add extra initialization here
  229. m_pDlgParent = DYNAMIC_DOWNCAST(CTaskSheetProperties, GetParent());
  230. ASSERT_VALID(m_pDlgParent);
  231. m_listCustom.InsertColumn(0, _T("Text"),  LVCFMT_LEFT, 160);
  232. m_listCustom.InsertColumn(1, _T("Value"), LVCFMT_LEFT, 60);
  233. ListView_SetExtendedListViewStyle(
  234. m_listCustom.m_hWnd, LVS_EX_FULLROWSELECT);
  235. LoadState();
  236. GetDlgItem(IDC_CHK_SHOWICONS)->EnableWindow(m_bUseLinks);
  237. return TRUE;  // return TRUE unless you set the focus to a control
  238.               // EXCEPTION: OCX Property Pages should return FALSE
  239. }
  240. BOOL CTaskPageButtons::OnSetActive()
  241. {
  242. if (!CPropertyPage::OnSetActive())
  243. return FALSE;
  244. EnableButtons();
  245. return TRUE;
  246. }
  247. void CTaskPageButtons::EnableButtons()
  248. {
  249. if (::IsWindow(m_listCustom.m_hWnd))
  250. {
  251. BOOL bEnable = (m_listCustom.GetSelectedCount() > 0);
  252. m_btnEdit.EnableWindow(bEnable);
  253. m_btnRemove.EnableWindow(bEnable);
  254. }
  255. }
  256. #define REG_SETTINGS _T("Settings\Buttons")
  257. void CTaskPageButtons::LoadState()
  258. {
  259. m_bOk = theApp.GetProfileInt(REG_SETTINGS, m_strOk, FALSE);
  260. AddCommonButton(IDOK);
  261. m_bYes = theApp.GetProfileInt(REG_SETTINGS, m_strYes, FALSE);
  262. AddCommonButton(IDYES);
  263. m_bNo = theApp.GetProfileInt(REG_SETTINGS, m_strNo, FALSE);
  264. AddCommonButton(IDNO);
  265. m_bCancel = theApp.GetProfileInt(REG_SETTINGS, m_strCancel, FALSE);
  266. AddCommonButton(IDCANCEL);
  267. m_bRetry = theApp.GetProfileInt(REG_SETTINGS, m_strRetry, FALSE);
  268. AddCommonButton(IDRETRY);
  269. m_bClose = theApp.GetProfileInt(REG_SETTINGS, m_strClose, FALSE);
  270. AddCommonButton(IDCLOSE);
  271. m_bUseLinks = theApp.GetProfileInt(REG_SETTINGS, _T("UseLinks"), FALSE);
  272. m_bShowIcons = theApp.GetProfileInt(REG_SETTINGS, _T("ShowIcons"), TRUE);
  273. if (::IsWindow(m_listCustom.m_hWnd))
  274. {
  275. int nCount = theApp.GetProfileInt(REG_SETTINGS, _T("Count"), 0);
  276. for (int i = 0; i < nCount; ++i)
  277. {
  278. CString strSection;
  279. strSection.Format(_T("UserItem_%d"), i);
  280. CString strBuffer = theApp.GetProfileString(REG_SETTINGS, strSection);
  281. CString strText;
  282. AfxExtractSubString(strText, strBuffer, 0, '~');
  283. CString strValue;
  284. AfxExtractSubString(strValue, strBuffer, 1, '~');
  285. InsertItem(strText, _ttoi(strValue));
  286. }
  287. }
  288. UpdateData(FALSE);
  289. }
  290. void CTaskPageButtons::SaveState()
  291. {
  292. UpdateData();
  293. theApp.WriteProfileInt(REG_SETTINGS, m_strOk, m_bOk);
  294. theApp.WriteProfileInt(REG_SETTINGS, m_strYes, m_bYes);
  295. theApp.WriteProfileInt(REG_SETTINGS, m_strNo, m_bNo);
  296. theApp.WriteProfileInt(REG_SETTINGS, m_strCancel, m_bCancel);
  297. theApp.WriteProfileInt(REG_SETTINGS, m_strRetry, m_bRetry);
  298. theApp.WriteProfileInt(REG_SETTINGS, m_strClose, m_bClose);
  299. theApp.WriteProfileInt(REG_SETTINGS, _T("UseLinks"), m_bUseLinks);
  300. theApp.WriteProfileInt(REG_SETTINGS, _T("ShowIcons"), m_bShowIcons);
  301. if (::IsWindow(m_listCustom.m_hWnd))
  302. {
  303. int nCount = m_listCustom.GetItemCount();
  304. theApp.WriteProfileInt(REG_SETTINGS, _T("Count"), nCount);
  305. for (int i = 0; i < nCount; ++i)
  306. {
  307. CString strSection;
  308. strSection.Format(_T("UserItem_%d"), i);
  309. CString strText = m_listCustom.GetItemText(i,0);
  310. CString strValue = m_listCustom.GetItemText(i,1);
  311. CString strBuffer;
  312. strBuffer.Format(_T("%s~%s"), strText, strValue);
  313. theApp.WriteProfileString(REG_SETTINGS, strSection, strBuffer);
  314. }
  315. }
  316. }
  317. void CTaskPageButtons::OnDestroy() 
  318. {
  319. SaveState();
  320. CPropertyPage::OnDestroy();
  321. }