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

Windows编程

开发平台:

Visual C++

  1. // NwindDlg.cpp : implementation file
  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. #include "stdafx.h"
  13. #include "extbind.h"
  14. #include "nwindDlg.h"
  15. #include "modeldlg.h"
  16. #ifdef _DEBUG
  17. #define new DEBUG_NEW
  18. #undef THIS_FILE
  19. static char BASED_CODE THIS_FILE[] = __FILE__;
  20. #endif
  21. /////////////////////////////////////////////////////////////////////////////
  22. // CNwindDialog dialog
  23. CNwindDialog::CNwindDialog(CWnd* pParent)
  24. : CDialog(CNwindDialog::IDD, pParent)
  25. {
  26. //{{AFX_DATA_INIT(CNwindDialog)
  27. m_ShowDate = 0;
  28. m_ShowName = 0;
  29. //}}AFX_DATA_INIT
  30. ASSERT(m_pParent != NULL);
  31. m_pParent = pParent;
  32. m_nID = CNwindDialog::IDD;
  33. }
  34. void CNwindDialog::DoDataExchange(CDataExchange* pDX)
  35. {
  36. CDialog::DoDataExchange(pDX);
  37. //{{AFX_DATA_MAP(CNwindDialog)
  38. DDX_Radio(pDX, IDC_BIRTHDATE, m_ShowDate);
  39. DDX_Radio(pDX, IDC_FIRSTNAME, m_ShowName);
  40. //}}AFX_DATA_MAP
  41. }
  42. BEGIN_MESSAGE_MAP(CNwindDialog, CDialog)
  43. //{{AFX_MSG_MAP(CNwindDialog)
  44. ON_BN_CLICKED(IDC_BIRTHDATE, OnChangeDate)
  45. ON_BN_CLICKED(IDC_FIRSTNAME, OnChangeName)
  46. ON_WM_DESTROY()
  47. ON_BN_CLICKED(IDC_HIREDATE, OnChangeDate)
  48. ON_BN_CLICKED(IDC_LASTNAME, OnChangeName)
  49. ON_WM_CREATE()
  50. //}}AFX_MSG_MAP
  51. END_MESSAGE_MAP()
  52. /////////////////////////////////////////////////////////////////////////////
  53. // CNwindDialog message handlers
  54. void CNwindDialog::OnOK()
  55. {
  56. CMSMask* pEdit = (CMSMask*)GetDlgItem(IDC_MASKEDBOX1);
  57. CListBox* pList = (CListBox*) (m_pParent->GetDlgItem(IDC_LIST));
  58. ASSERT(pList != NULL);
  59. ASSERT(pEdit != NULL);
  60. if (pList != NULL && pEdit != NULL)
  61. {
  62. CString str=pEdit->GetText();
  63. str=_T("NorthWind:") + str;
  64. pList->AddString(str);
  65. }
  66. }
  67. BOOL CNwindDialog::Create()
  68. {
  69. return CDialog::Create(m_nID, m_pParent);
  70. }
  71. void CNwindDialog::OnCancel()
  72. {
  73. ((CMainDlg*)m_pParent)->BoxDone();
  74. DestroyWindow();
  75. }
  76. void CNwindDialog::PostNcDestroy()
  77. {
  78. delete this;
  79. }
  80. BOOL CNwindDialog::OnInitDialog()
  81. {
  82. CDialog::OnInitDialog();
  83. RECT r;
  84. GetClientRect(&r);
  85. r.bottom=r.top+180;
  86. r.top+=40;  // top of the dialog (almost)
  87. r.left+=10;r.right-=10; // some margins to look better
  88. // get the cursor from IDC_RDCNWIND created in Pubs dialog
  89. // parent dialogRDC
  90. LPUNKNOWN pCursor=m_pParent->GetDlgItem(IDC_RDCNWIND)->GetDSCCursor();
  91. ASSERT(pCursor!=NULL);
  92. m_pGrid.Create(_T("Northwind Employees table"),WS_VISIBLE | WS_CHILD,
  93. r,this,IDC_GRIDNWIND);
  94. m_pGrid.SetDataSource(pCursor);
  95. m_pGrid.BindProperty(0x9,m_pParent->GetDlgItem(IDC_RDCNWIND));
  96. //  create the calendar control to display the Birth/Hire Date
  97. GetClientRect(&r);
  98. r.top=r.bottom-170; // the very bottom portion of the dialog
  99. m_date.Create(NULL,WS_VISIBLE | WS_CHILD,
  100. r,this,IDC_CALNWIND);
  101. BindCalendar();
  102. // bind the mased edit to IDC_RDCNWIND
  103. CWnd* pMasked=GetDlgItem(IDC_MASKEDBOX1);
  104. ASSERT(pMasked!=NULL);
  105. // bind to the correct field: HireDate or BirthDate
  106. pMasked->BindDefaultProperty(MASKDISPID_TEXT,VT_BSTR,
  107. m_ShowName==0?_T("FirstName"):_T("LastName"),
  108. m_pParent->GetDlgItem(IDC_RDCNWIND));
  109. return TRUE;  // return TRUE unless you set the focus to a control
  110.   // EXCEPTION: OCX Property Pages should return FALSE
  111. }
  112. void CNwindDialog::BindCalendar()
  113. {
  114. // bind the calendar to the correct field: HireDate or BirthDate
  115. m_date.BindDefaultProperty(0xc,VT_VARIANT,m_ShowDate==0?_T("BirthDate"):_T("HireDate"),
  116. m_pParent->GetDlgItem(IDC_RDCNWIND)); // bind to the RDC in Pubs dialog
  117. }
  118. void CNwindDialog::OnChangeDate()
  119. {
  120. if (!UpdateData())
  121. return;
  122. BindCalendar();
  123. }
  124. void CNwindDialog::OnChangeName()
  125. {
  126. if (!UpdateData())
  127. return;
  128. CWnd* p_maskedit;
  129. p_maskedit=GetDlgItem(IDC_MASKEDBOX1); // retrieve the OCX control with name
  130. ASSERT(p_maskedit!=NULL);
  131. if (p_maskedit==NULL)
  132. return;
  133. p_maskedit->BindDefaultProperty(MASKDISPID_TEXT,VT_BSTR,
  134. m_ShowName==0?_T("FirstName"):_T("LastName"),
  135. m_pParent->GetDlgItem(IDC_RDCNWIND));
  136. }
  137. void CNwindDialog::OnDestroy()
  138. {
  139. CWnd* pMasked=GetDlgItem(IDC_MASKEDBOX1);
  140. ASSERT(pMasked!=NULL);
  141. pMasked->BindDefaultProperty(MASKDISPID_TEXT,VT_BSTR,NULL,NULL); // unbind the edit
  142. m_date.BindDefaultProperty(0xc,VT_VARIANT,NULL,NULL);   // unbind the calendar
  143. m_pGrid.SetDataSource(NULL);                            // unbind the GRID
  144. m_pGrid.BindProperty(0x9,NULL);
  145. CDialog::OnDestroy();
  146. }
  147. int CNwindDialog::OnCreate(LPCREATESTRUCT lpCreateStruct)
  148. {
  149. if (CDialog::OnCreate(lpCreateStruct) == -1)
  150. return -1;
  151. // move the window down (do not cover the main dialog)
  152. MoveWindow(lpCreateStruct->x+50,lpCreateStruct->y+50,
  153. lpCreateStruct->cx,lpCreateStruct->cy,FALSE );
  154. return 0;
  155. }
  156. BEGIN_EVENTSINK_MAP(CNwindDialog, CDialog)
  157. ON_PROPNOTIFY_RANGE(CNwindDialog, IDC_MASKEDBOX1, IDC_MASKEDBOX1, MASKDISPID_TEXT, OnRequestEdit, OnChanged)
  158. END_EVENTSINK_MAP()
  159. BOOL CNwindDialog::OnRequestEdit(UINT nCtl, BOOL* pBool)
  160. {   // this handler is never called in optimistic DataBinding architecture supplied by MFC
  161. // but is mapped as well as OnChanged to the events produced by DSC.
  162. // see ON_PROPNOTIFY_RANGE macro.
  163. // You might want to implement pessimistic (Access style) DataBinding
  164. // to make use of this function
  165. return TRUE;
  166. }
  167. BOOL CNwindDialog::OnChanged(UINT nCtl)
  168. {
  169. // process the notification from nCtl control when data changed
  170. // in optimistic DataBinding
  171. return TRUE;
  172. }