home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / mfc / general / ctrltest / dertest.cpp < prev    next >
C/C++ Source or Header  |  1998-03-26  |  5KB  |  159 lines

  1. // deredit.cpp : C++ derived Edit control example
  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 "ctrltest.h"
  15.  
  16. #include "paredit.h"
  17.  
  18. /////////////////////////////////////////////////////////////////////////////
  19.  
  20. class CDerEditDlg : public CDialog
  21. {
  22. protected:
  23.     CFont*  m_pFont;
  24.     // construct
  25.     CParsedEdit m_edit1, m_edit2, m_edit3, m_edit4;
  26.     CStatic m_static1, m_static2, m_static3, m_static4;
  27. public:
  28.     //{{AFX_DATA(CDerEditDlg)
  29.         enum { IDD = IDD_DERIVED_EDIT };
  30.     //}}AFX_DATA
  31.     CDerEditDlg()
  32.         : CDialog(CDerEditDlg::IDD)
  33.         { }
  34.  
  35.     void OnSetFont(CFont* pFont)
  36.             { m_pFont = pFont; }
  37.  
  38.     BOOL OnInitDialog();
  39.     //{{AFX_MSG(CDerEditDlg)
  40.         virtual void OnOK();
  41.     //}}AFX_MSG
  42.     DECLARE_MESSAGE_MAP()
  43. };
  44.  
  45. BEGIN_MESSAGE_MAP(CDerEditDlg, CDialog)
  46.     //{{AFX_MSG_MAP(CDerEditDlg)
  47.     //}}AFX_MSG_MAP
  48. END_MESSAGE_MAP()
  49.  
  50.  
  51. BOOL CDerEditDlg::OnInitDialog()
  52.     // create children on InitDialog
  53.     //  (not in CDerEditDlg constructor since the dialog has
  54.     //    no attached HWND in the constructor)
  55. {
  56.     // This is an example of the _incorrect_ way to create a dialog
  57.     // The following code show you what you should _not_ do:
  58.     //    1) do not use hard coded numbers for coordinates and sizes
  59.     //     (these will break when the font sizes changes and are
  60.     //     hard to edit and maintain).
  61.     //    2) do not put strings in code, they should be in resources.
  62.     //    3) as you can see below the programming steps required
  63.     //     to create controls, pass the correct creation parameters,
  64.     //     and set the appropriate font, is complicated and error prone.
  65.     //    4) localization of the controls would require changes to the
  66.     //     sources for the captions, font, coordinates, and sizes.
  67.  
  68.     const int yStart = 8;
  69.     const int height = 30;
  70.  
  71.     CPoint whereLabel(10, yStart);
  72.     CSize sizeLabel(80, 24);
  73.  
  74.     CPoint whereEdit(90, yStart);
  75.     CSize sizeEdit(140, 24);
  76.  
  77.     m_static1.Create(_T("Letters:"), WS_VISIBLE | WS_CHILD | SS_LEFT,
  78.         CRect(whereLabel, sizeLabel), this, (UINT)-1);
  79.     m_static1.SetFont(m_pFont);
  80.     whereLabel.y += height;
  81.     m_edit1.Create(WS_VISIBLE | WS_CHILD | WS_TABSTOP | WS_BORDER |
  82.         PES_LETTERS,
  83.         CRect(whereEdit, sizeEdit), this, IDC_EDIT1);
  84.     m_edit1.SetFont(m_pFont);
  85.     whereEdit.y += height;
  86.  
  87.     m_static2.Create(_T("Numbers:"), WS_VISIBLE | WS_CHILD | SS_LEFT,
  88.         CRect(whereLabel, sizeLabel), this, (UINT)-1);
  89.     m_static2.SetFont(m_pFont);
  90.     whereLabel.y += height;
  91.     m_edit2.Create(WS_VISIBLE | WS_CHILD | WS_TABSTOP | WS_BORDER |
  92.         PES_NUMBERS,
  93.         CRect(whereEdit, sizeEdit), this, IDC_EDIT2);
  94.     m_edit2.SetFont(m_pFont);
  95.     whereEdit.y += height;
  96.  
  97.     m_static3.Create(_T("Either:"), WS_VISIBLE | WS_CHILD | SS_LEFT,
  98.         CRect(whereLabel, sizeLabel), this, (UINT)-1);
  99.     m_static3.SetFont(m_pFont);
  100.     whereLabel.y += height;
  101.     m_edit3.Create(WS_VISIBLE | WS_CHILD | WS_TABSTOP | WS_BORDER |
  102.         PES_LETTERS | PES_NUMBERS,
  103.         CRect(whereEdit, sizeEdit), this, IDC_EDIT3);
  104.     m_edit3.SetFont(m_pFont);
  105.     whereEdit.y += height;
  106.  
  107.     m_static4.Create(_T("Anything:"), WS_VISIBLE | WS_CHILD | SS_LEFT,
  108.         CRect(whereLabel, sizeLabel), this, (UINT)-1);
  109.     m_static4.SetFont(m_pFont);
  110.     whereLabel.y += height;
  111.     m_edit4.Create(WS_VISIBLE | WS_CHILD | WS_TABSTOP | WS_BORDER |
  112.         PES_ALL,
  113.         CRect(whereEdit, sizeEdit), this, IDC_EDIT4);
  114.     m_edit4.SetFont(m_pFont);
  115.     whereEdit.y += height;
  116.  
  117.     // change the dialog height so everything fits
  118.     int yBottom = whereEdit.y + height * 2; // extra space
  119.     CRect rect;
  120.     GetWindowRect(rect);
  121.     VERIFY(SetWindowPos(NULL, -1, -1, rect.Width(), yBottom,
  122.         SWP_NOMOVE|SWP_NOZORDER|SWP_NOREDRAW|SWP_NOACTIVATE));
  123.  
  124.     // set focus to first one
  125.     m_edit1.SetFocus();
  126.     return FALSE;   // focus set
  127. }
  128.  
  129. void CDerEditDlg::OnOK()
  130. {
  131. #ifdef _DEBUG
  132.     // dump results, normally you would do something with these
  133.     CString s;
  134.     m_edit1.GetWindowText(s);
  135.     TRACE(_T("edit1 = '%s'\n"), s);
  136.     m_edit2.GetWindowText(s);
  137.     TRACE(_T("edit2 = '%s'\n"), s);
  138.     m_edit3.GetWindowText(s);
  139.     TRACE(_T("edit3 = '%s'\n"), s);
  140.     m_edit4.GetWindowText(s);
  141.     TRACE(_T("edit4 = '%s'\n"), s);
  142. #endif
  143.  
  144.     EndDialog(IDOK);
  145. }
  146.  
  147. /////////////////////////////////////////////////////////////////////////////
  148. // Run the test
  149.  
  150. void CTestWindow::OnTestDerivedEdit()
  151. {
  152.     TRACE(_T("running dialog with special derived CParsedEdit controls in it\n"));
  153.     CDerEditDlg dlg;
  154.     dlg.DoModal();
  155. }
  156.  
  157.  
  158. /////////////////////////////////////////////////////////////////////////////
  159.