HISTORY.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:2k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // history.cpp : implementation of the CHistoryList class
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12. //
  13. #include "stdafx.h"
  14. #include "np.h"
  15. #include "combobar.h"
  16. #include "mainfrm.h"
  17. #include "npdoc.h"
  18. #include "npview.h"
  19. #include "finddlg.h"
  20. #include <afxcoll.h>
  21. void CHistoryList::FillCombobox()
  22. {
  23. CNotepadView* pView = GetApplicationView();
  24. CWnd* pWnd = pView->m_pFindDialog->GetDlgItem(IDC_COMBO1);
  25. ASSERT_VALID(pWnd);
  26. POSITION pos = GetHeadPosition();
  27. while(pos)
  28. pWnd->SendMessage(CB_ADDSTRING, 0, (LPARAM)((LPCTSTR)GetNext(pos)));
  29. }
  30. BOOL CHistoryList::AddString(CString &s1)
  31. {
  32. CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
  33. CWnd* pWnd = &pFrame->m_wndToolBar.m_toolBarCombo;
  34. ASSERT_VALID(pWnd);
  35. if (!s1.GetLength())
  36. return FALSE;
  37. POSITION pos = Find(s1);
  38. int nCount = GetCount();
  39. if (pos == NULL)
  40. {
  41. // if list is full, remove from the end
  42. if (nCount == HISTORY_COUNT)
  43. {
  44. RemoveTail();
  45. pWnd->SendMessage(CB_DELETESTRING, nCount-1);
  46. }
  47. AddHead(s1);
  48. pWnd->SendMessage(CB_INSERTSTRING, 0, (LPARAM)((LPCTSTR)s1));
  49. }
  50. else
  51. {
  52. SwapStrings(pWnd, s1);
  53. }
  54. return TRUE;
  55. }
  56. void CHistoryList::SwapStrings(CWnd* pWnd, CString &s1)
  57. {
  58. // swap internal list items
  59. POSITION pos = GetHeadPosition();
  60. ASSERT(pos != NULL);
  61. CString s2;
  62. int nCount = GetCount();
  63. int idx=0;
  64. // Note: combo-box find is not case-sensitive
  65. do
  66. {
  67. s2 = GetNext(pos);
  68. } while(idx < nCount && s1 != s2 && ++idx);
  69. // swap internal list
  70. pos = FindIndex(idx);
  71. ASSERT(pos != NULL);
  72. RemoveAt(pos);
  73. AddHead(s2);
  74. // swap combo box item with combo's edit control
  75. pWnd->SendMessage(CB_DELETESTRING, idx);
  76. pWnd->SendMessage(CB_SETCURSEL, pWnd->SendMessage(CB_INSERTSTRING, 0, (LPARAM)((LPCTSTR)s1)));
  77. }