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

Windows编程

开发平台:

Visual C++

  1. // ipdrivw.cpp : implementation of the CDriverView class
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992-1995 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. #include "stdafx.h"
  13. #include "ipdrive.h"
  14. #include "ipdridoc.h"
  15. #include "ipdrivw.h"
  16. #ifdef _DEBUG
  17. #undef THIS_FILE
  18. static char BASED_CODE THIS_FILE[] = __FILE__;
  19. #endif
  20. /////////////////////////////////////////////////////////////////////////////
  21. // CDriverView
  22. IMPLEMENT_DYNCREATE(CDriverView, CFormView)
  23. BEGIN_MESSAGE_MAP(CDriverView, CFormView)
  24.     //{{AFX_MSG_MAP(CDriverView)
  25.     ON_BN_CLICKED(ID_LOOKUP, OnLookup)
  26.     ON_BN_CLICKED(ID_REMOVE, OnRemove)
  27.     ON_BN_CLICKED(ID_ADD, OnAdd)
  28.     ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
  29.     ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
  30.     //}}AFX_MSG_MAP
  31. END_MESSAGE_MAP()
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CDriverView construction/destruction
  34. CDriverView::CDriverView()
  35.     : CFormView(CDriverView::IDD)
  36. {
  37.     //{{AFX_DATA_INIT(CDriverView)
  38.         // NOTE: the ClassWizard will add member initialization here
  39.     //}}AFX_DATA_INIT
  40.     m_bInitialized = FALSE;
  41. }
  42. CDriverView::~CDriverView()
  43. {
  44. }
  45. void CDriverView::DoDataExchange(CDataExchange* pDX)
  46. {
  47.     CFormView::DoDataExchange(pDX);
  48.     //{{AFX_DATA_MAP(CDriverView)
  49.     DDX_Control(pDX, IDC_EDIT2, m_toValue);
  50.     DDX_Control(pDX, IDC_COMBO3, m_toType);
  51.     DDX_Control(pDX, IDC_EDIT1, m_ctrlValue);
  52.     DDX_Control(pDX, IDC_COMBO2, m_ctrlType);
  53.     //}}AFX_DATA_MAP
  54. }
  55. /////////////////////////////////////////////////////////////////////////////
  56. // CDriverView diagnostics
  57. #ifdef _DEBUG
  58. void CDriverView::AssertValid() const
  59. {
  60.     CFormView::AssertValid();
  61. }
  62. void CDriverView::Dump(CDumpContext& dc) const
  63. {
  64.     CFormView::Dump(dc);
  65. }
  66. CDriverDoc* CDriverView::GetDocument() // non-debug version is inline
  67. {
  68.     return STATIC_DOWNCAST(CDriverDoc, m_pDocument);
  69. }
  70. #endif //_DEBUG
  71. /////////////////////////////////////////////////////////////////////////////
  72. // CDriverView message handlers
  73. void CDriverView::OnInitialUpdate() 
  74. {
  75.     GetParentFrame()->RecalcLayout();
  76.     ResizeParentToFit(FALSE);
  77.     CFormView::OnInitialUpdate();
  78.     if (!m_bInitialized)
  79.     {
  80.         m_bInitialized = TRUE;
  81.         GetDlgItem(IDC_CURRENT_COUNT)->GetWindowText(m_strCurrentCount);
  82.     }
  83.     // initialize the form
  84.     m_ctrlType.SetCurSel(0);
  85.     UpdateToNothing();
  86. }
  87. void CDriverView::UpdateToNothing()
  88. {
  89.     UpdateCurrentCount();
  90.     m_toType.SetCurSel(-1);
  91.     CString str;
  92.     str.LoadString(IDS_NOTHING);
  93.     m_toValue.SetWindowText(str);
  94. }
  95. void CDriverView::UpdateCurrentCount()
  96. {
  97.     CDriverDoc* pDoc = GetDocument();
  98.     ASSERT_VALID(pDoc);
  99.     CString str;
  100.     str.Format(m_strCurrentCount, pDoc->m_map->Count);
  101.     SetDlgItemText(IDC_CURRENT_COUNT, str);
  102. }
  103. _variant_t CDriverView::GetFromVariant()
  104. {
  105.     CString strValue;
  106.     m_ctrlValue.GetWindowText(strValue);
  107.     // we can just throw it in as a string, then coerce to chosen type
  108.     _variant_t va = (LPCTSTR) strValue, vaTemp;
  109.     try
  110.     {
  111.         vaTemp.ChangeType(max(0, m_ctrlType.GetCurSel()), &va);
  112.     }
  113.     catch (_com_error& e)
  114.     {
  115.         dump_com_error(e);
  116.         AfxMessageBox(IDP_INCOMPATIBLE_TYPE_VALUE);
  117.     }
  118.     return vaTemp;
  119. }
  120. _variant_t CDriverView::GetToVariant()
  121. {
  122.     CString strValue;
  123.     m_toValue.GetWindowText(strValue);
  124.     // we can just throw it in as a string, then coerce to chosen type
  125.     _variant_t va = (LPCTSTR) strValue, vaTemp;
  126.     try
  127.     {
  128.         vaTemp.ChangeType(max(0, m_toType.GetCurSel()), &va);
  129.     }
  130.     catch (_com_error& e)
  131.     {
  132.         dump_com_error(e);
  133.         AfxMessageBox(IDP_INCOMPATIBLE_TYPE_VALUE);
  134.     }
  135.     return vaTemp;
  136. }
  137.     
  138. void CDriverView::UpdateCurrentVariant(const _variant_t& va)
  139. {
  140.     m_toType.SetCurSel(va.vt);
  141.     _variant_t vaTemp;
  142.     CString str;
  143.     try
  144.     {
  145.         vaTemp.ChangeType(VT_BSTR, &va);
  146.         str = (LPCTSTR) (_bstr_t) vaTemp;
  147.     }
  148.     catch (...)
  149.     {
  150.         str.LoadString(IDS_UNKNOWN);
  151.     }
  152.     
  153.     m_toValue.SetWindowText(str);
  154. }
  155. void CDriverView::OnLookup() 
  156. {
  157.     CDriverDoc* pDoc = GetDocument();
  158.     ASSERT_VALID(pDoc);
  159.     _variant_t vaFrom = GetFromVariant();
  160.     _variant_t vaTo = pDoc->m_map->Item[vaFrom];
  161.     UpdateCurrentVariant(vaTo);
  162. }
  163. void CDriverView::OnRemove() 
  164. {
  165.     CDriverDoc* pDoc = GetDocument();
  166.     ASSERT_VALID(pDoc);
  167.     _variant_t vaFrom = GetFromVariant();
  168.     pDoc->m_map->RemoveKey(vaFrom);
  169.     
  170.     UpdateToNothing();
  171.     UpdateCurrentCount();
  172. }
  173. void CDriverView::OnAdd() 
  174. {
  175.     CDriverDoc* pDoc = GetDocument();
  176.     ASSERT_VALID(pDoc);
  177.     _variant_t vaFrom = GetFromVariant();
  178.     _variant_t vaTo = GetToVariant();
  179.     pDoc->m_map->SetAt(vaFrom, vaTo);
  180.     
  181.     OnLookup();
  182.     UpdateCurrentCount();
  183. }
  184. void CDriverView::OnButton1() 
  185. {
  186.     CDriverDoc* pDoc = GetDocument();
  187.     ASSERT_VALID(pDoc);
  188.     long nCount = 0;
  189.     DWORD dwThen = GetTickCount();
  190.     if (GetKeyState(VK_CONTROL) >= 0)
  191.     {
  192.         while (GetTickCount() - dwThen < 5000)
  193.         {
  194.             pDoc->m_map->str1 = _T("Hello, World");
  195.             ++nCount;
  196.         }
  197.     }
  198.     else
  199.     {
  200.         while (GetTickCount() - dwThen < 5000)
  201.         {
  202.             pDoc->m_map->i1 = 1;
  203.             ++nCount;
  204.         }
  205.     }
  206.     CString str, strFormat;
  207.     strFormat.LoadString(IDP_TIMING_RESULT);
  208.     str.Format(strFormat, nCount);
  209.     AfxMessageBox(str);
  210. }
  211. void CDriverView::OnButton2() 
  212. {
  213.     CDriverDoc* pDoc = GetDocument();
  214.     ASSERT_VALID(pDoc);
  215.     long nCount = 0;
  216.     DWORD dwThen = GetTickCount();
  217.     if (GetKeyState(VK_CONTROL) >= 0)
  218.     {
  219.         while (GetTickCount() - dwThen < 5000)
  220.         {
  221.             pDoc->m_map->str2 = _T("Hello, World");
  222.             ++nCount;
  223.         }
  224.     }
  225.     else
  226.     {
  227.         while (GetTickCount() - dwThen < 5000)
  228.         {
  229.             pDoc->m_map->i2 = 1;
  230.             ++nCount;
  231.         }
  232.     }
  233.     CString str, strFormat;
  234.     strFormat.LoadString(IDP_TIMING_RESULT);
  235.     str.Format(strFormat, nCount);
  236.     AfxMessageBox(str);
  237. }