home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / C++-7 / DISK11 / MFC / SAMPLES / CTRLTEST / FEATPEN.CP$ / featpen
Encoding:
Text File  |  1992-03-17  |  4.7 KB  |  190 lines

  1. // featpen.cpp : pen HEdit features
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992 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 Microsoft
  9. // QuickHelp documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12.  
  13. #include "ctrltest.h"
  14.  
  15. // we need the MFC extensions for PenWindows
  16. #include <afxpen.h>
  17. // we also use the MFC common dialogs for color picker
  18. #include <afxdlgs.h>
  19.  
  20. /////////////////////////////////////////////////////////////////////////////
  21.  
  22. class CPenFeatureDlg : public CModalDialog
  23. {
  24. public:
  25.     CPenFeatureDlg()
  26.         : CModalDialog(IDD_PENEDIT_FEATURES)
  27.         { }
  28.  
  29.     // just 1 HEdit to play with
  30.     CHEdit& Edit1()
  31.                 { return *(CHEdit*)GetDlgItem(IDC_EDIT1); }
  32.  
  33. // Implementation
  34. protected:
  35.     BOOL OnInitDialog();
  36.     void OnOK();
  37.     void OnConfigure();
  38.     DECLARE_MESSAGE_MAP();
  39. };
  40.  
  41. BEGIN_MESSAGE_MAP(CPenFeatureDlg, CModalDialog)
  42.     ON_COMMAND(IDC_CONFIGURE, OnConfigure)
  43. END_MESSAGE_MAP()
  44.  
  45. /////////////////////////////////////////////////////////////////////////////
  46.  
  47. BOOL CPenFeatureDlg::OnInitDialog()
  48. {
  49.     // nothing special to do
  50.     return TRUE;
  51. }
  52.  
  53. void CPenFeatureDlg::OnOK()
  54. {
  55. #ifdef _DEBUG
  56.     // dump results, normally you would do something with these
  57.     CString s;
  58.     Edit1().GetWindowText(s);
  59.     TRACE("edit1 = '%s'\n", (const char*) s);
  60. #endif
  61.  
  62.     EndDialog(IDOK);
  63. }
  64.  
  65. /////////////////////////////////////////////////////////////////////////////
  66. // Run the test
  67.  
  68. void CTestWindow::OnTestPenEditFeatures()
  69. {
  70.     TRACE("running HEdit feature test dialog\n");
  71.     CPenFeatureDlg dlg;
  72.     dlg.DoModal();
  73. }
  74.  
  75.  
  76. /////////////////////////////////////////////////////////////////////////////
  77. // Configure the HEdit edit item
  78.     // (note: local changes only)
  79.  
  80. // Dialog used for the configure option
  81. class CConfigureHEditDlg : public CModalDialog
  82. {
  83. protected:
  84.     CHEdit&     m_rHEdit;       // reference to Edit item to configure
  85.     COLORREF    m_inkColor;     // for color picker
  86.  
  87. public:
  88.     CConfigureHEditDlg(CHEdit& rHEdit, CWnd* pParent = NULL)
  89.         : CModalDialog(IDD_PENEDIT_CONFIGURE, pParent),
  90.             m_rHEdit(rHEdit)
  91.         { }
  92.  
  93. // Implementation
  94. protected:
  95.     BOOL OnInitDialog();
  96.     void OnOK();
  97.     void OnChooseInkColor();
  98.     DECLARE_MESSAGE_MAP();
  99. };
  100.  
  101. BEGIN_MESSAGE_MAP(CConfigureHEditDlg, CModalDialog)
  102.     ON_COMMAND(IDC_BUTTON2, OnChooseInkColor)
  103. END_MESSAGE_MAP()
  104.  
  105. BOOL CConfigureHEditDlg::OnInitDialog()
  106. {
  107.     // fill in initial values
  108.     RC rcInfo;
  109.     VERIFY(m_rHEdit.GetRC(&rcInfo));            // get current settings
  110.  
  111.     // set the ALC bits (max of 32 of them, 1 checkbox each)
  112.     TRACE("initial ALC = 0x%lx\n", rcInfo.alc);
  113.     for (int i = 0; i < 32; i++)
  114.     {
  115.         if (rcInfo.alc & (1L<<i))
  116.             CheckDlgButton(IDC_ALC_FIRST+i, TRUE);
  117.                 // check control if there is one
  118.     }
  119.  
  120.     // set LeftHanded
  121.     if (rcInfo.wRcPreferences & RCP_LEFTHAND)
  122.         CheckDlgButton(IDC_BUTTON1, TRUE);
  123.  
  124.     // set ink info
  125.     SetDlgItemInt(IDC_EDIT1, rcInfo.nInkWidth);
  126.     m_inkColor = rcInfo.rgbInk;
  127.     return TRUE;
  128. }
  129.  
  130. void CConfigureHEditDlg::OnOK()
  131. {
  132.     // get info from dialog, update fields of RC as appropriate
  133.     RC rcInfo;
  134.     VERIFY(m_rHEdit.GetRC(&rcInfo));            // get current settings
  135.  
  136.     for (int i = 0; i < 32; i++)
  137.     {
  138.         CButton* pButton = (CButton*)GetDlgItem(IDC_ALC_FIRST + i);
  139.         if (pButton != NULL)
  140.         {
  141.             // set bit depending on checkbox content
  142.             if (pButton->GetCheck())
  143.                 rcInfo.alc |= (1L << i);
  144.             else
  145.                 rcInfo.alc &= ~(1L << i);
  146.         }
  147.     }
  148.     TRACE("final ALC = 0x%lx\n", rcInfo.alc);
  149.  
  150.     if (IsDlgButtonChecked(IDC_BUTTON1))
  151.         rcInfo.wRcPreferences |= RCP_LEFTHAND;
  152.     else
  153.         rcInfo.wRcPreferences &= ~RCP_LEFTHAND;
  154.  
  155.     BOOL bOk;
  156.     rcInfo.nInkWidth = GetDlgItemInt(IDC_EDIT1, &bOk);
  157.     if (!bOk || rcInfo.nInkWidth < -1 || rcInfo.nInkWidth > 15)
  158.     {
  159.         MessageBox("Illegal Ink Width (-1 .. 15 permitted)");
  160.         CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
  161.         pEdit->SetSel(0, -1);
  162.         pEdit->SetFocus();
  163.         return;
  164.     }
  165.     rcInfo.rgbInk = m_inkColor;
  166.  
  167.     // set the final values
  168.     VERIFY(m_rHEdit.SetRC(&rcInfo));
  169.     EndDialog(IDOK);
  170. }
  171.  
  172. void CConfigureHEditDlg::OnChooseInkColor()
  173. {
  174.     DWORD dwFlags = CC_PREVENTFULLOPEN;
  175.     COLORREF crPrompt = (m_inkColor != RC_LDEFAULT) ? m_inkColor : 0;
  176.         // default to 0 (black) for default color
  177.  
  178.     CColorDialog dlg(CC_PREVENTFULLOPEN, crPrompt, this);
  179.     if (dlg.DoModal() == IDOK)
  180.         m_inkColor = dlg.GetColor();
  181. }
  182.  
  183. void CPenFeatureDlg::OnConfigure()
  184. {
  185.     CConfigureHEditDlg dlg(Edit1(), this);
  186.     dlg.DoModal();
  187. }
  188.  
  189. /////////////////////////////////////////////////////////////////////////////
  190.