159 lines
4.6 KiB
C++
159 lines
4.6 KiB
C++
|
// deredit.cpp : C++ derived Edit control example
|
||
|
//
|
||
|
// This is a part of the Microsoft Foundation Classes C++ library.
|
||
|
// Copyright (C) 1992-1998 Microsoft Corporation
|
||
|
// All rights reserved.
|
||
|
//
|
||
|
// This source code is only intended as a supplement to the
|
||
|
// Microsoft Foundation Classes Reference and related
|
||
|
// electronic documentation provided with the library.
|
||
|
// See these sources for detailed information regarding the
|
||
|
// Microsoft Foundation Classes product.
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
#include "ctrltest.h"
|
||
|
|
||
|
#include "paredit.h"
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
class CDerEditDlg : public CDialog
|
||
|
{
|
||
|
protected:
|
||
|
CFont* m_pFont;
|
||
|
// construct
|
||
|
CParsedEdit m_edit1, m_edit2, m_edit3, m_edit4;
|
||
|
CStatic m_static1, m_static2, m_static3, m_static4;
|
||
|
public:
|
||
|
//{{AFX_DATA(CDerEditDlg)
|
||
|
enum { IDD = IDD_DERIVED_EDIT };
|
||
|
//}}AFX_DATA
|
||
|
CDerEditDlg()
|
||
|
: CDialog(CDerEditDlg::IDD)
|
||
|
{ }
|
||
|
|
||
|
void OnSetFont(CFont* pFont)
|
||
|
{ m_pFont = pFont; }
|
||
|
|
||
|
BOOL OnInitDialog();
|
||
|
//{{AFX_MSG(CDerEditDlg)
|
||
|
virtual void OnOK();
|
||
|
//}}AFX_MSG
|
||
|
DECLARE_MESSAGE_MAP()
|
||
|
};
|
||
|
|
||
|
BEGIN_MESSAGE_MAP(CDerEditDlg, CDialog)
|
||
|
//{{AFX_MSG_MAP(CDerEditDlg)
|
||
|
//}}AFX_MSG_MAP
|
||
|
END_MESSAGE_MAP()
|
||
|
|
||
|
|
||
|
BOOL CDerEditDlg::OnInitDialog()
|
||
|
// create children on InitDialog
|
||
|
// (not in CDerEditDlg constructor since the dialog has
|
||
|
// no attached HWND in the constructor)
|
||
|
{
|
||
|
// This is an example of the _incorrect_ way to create a dialog
|
||
|
// The following code show you what you should _not_ do:
|
||
|
// 1) do not use hard coded numbers for coordinates and sizes
|
||
|
// (these will break when the font sizes changes and are
|
||
|
// hard to edit and maintain).
|
||
|
// 2) do not put strings in code, they should be in resources.
|
||
|
// 3) as you can see below the programming steps required
|
||
|
// to create controls, pass the correct creation parameters,
|
||
|
// and set the appropriate font, is complicated and error prone.
|
||
|
// 4) localization of the controls would require changes to the
|
||
|
// sources for the captions, font, coordinates, and sizes.
|
||
|
|
||
|
const int yStart = 8;
|
||
|
const int height = 30;
|
||
|
|
||
|
CPoint whereLabel(10, yStart);
|
||
|
CSize sizeLabel(80, 24);
|
||
|
|
||
|
CPoint whereEdit(90, yStart);
|
||
|
CSize sizeEdit(140, 24);
|
||
|
|
||
|
m_static1.Create(_T("Letters:"), WS_VISIBLE | WS_CHILD | SS_LEFT,
|
||
|
CRect(whereLabel, sizeLabel), this, (UINT)-1);
|
||
|
m_static1.SetFont(m_pFont);
|
||
|
whereLabel.y += height;
|
||
|
m_edit1.Create(WS_VISIBLE | WS_CHILD | WS_TABSTOP | WS_BORDER |
|
||
|
PES_LETTERS,
|
||
|
CRect(whereEdit, sizeEdit), this, IDC_EDIT1);
|
||
|
m_edit1.SetFont(m_pFont);
|
||
|
whereEdit.y += height;
|
||
|
|
||
|
m_static2.Create(_T("Numbers:"), WS_VISIBLE | WS_CHILD | SS_LEFT,
|
||
|
CRect(whereLabel, sizeLabel), this, (UINT)-1);
|
||
|
m_static2.SetFont(m_pFont);
|
||
|
whereLabel.y += height;
|
||
|
m_edit2.Create(WS_VISIBLE | WS_CHILD | WS_TABSTOP | WS_BORDER |
|
||
|
PES_NUMBERS,
|
||
|
CRect(whereEdit, sizeEdit), this, IDC_EDIT2);
|
||
|
m_edit2.SetFont(m_pFont);
|
||
|
whereEdit.y += height;
|
||
|
|
||
|
m_static3.Create(_T("Either:"), WS_VISIBLE | WS_CHILD | SS_LEFT,
|
||
|
CRect(whereLabel, sizeLabel), this, (UINT)-1);
|
||
|
m_static3.SetFont(m_pFont);
|
||
|
whereLabel.y += height;
|
||
|
m_edit3.Create(WS_VISIBLE | WS_CHILD | WS_TABSTOP | WS_BORDER |
|
||
|
PES_LETTERS | PES_NUMBERS,
|
||
|
CRect(whereEdit, sizeEdit), this, IDC_EDIT3);
|
||
|
m_edit3.SetFont(m_pFont);
|
||
|
whereEdit.y += height;
|
||
|
|
||
|
m_static4.Create(_T("Anything:"), WS_VISIBLE | WS_CHILD | SS_LEFT,
|
||
|
CRect(whereLabel, sizeLabel), this, (UINT)-1);
|
||
|
m_static4.SetFont(m_pFont);
|
||
|
whereLabel.y += height;
|
||
|
m_edit4.Create(WS_VISIBLE | WS_CHILD | WS_TABSTOP | WS_BORDER |
|
||
|
PES_ALL,
|
||
|
CRect(whereEdit, sizeEdit), this, IDC_EDIT4);
|
||
|
m_edit4.SetFont(m_pFont);
|
||
|
whereEdit.y += height;
|
||
|
|
||
|
// change the dialog height so everything fits
|
||
|
int yBottom = whereEdit.y + height * 2; // extra space
|
||
|
CRect rect;
|
||
|
GetWindowRect(rect);
|
||
|
VERIFY(SetWindowPos(NULL, -1, -1, rect.Width(), yBottom,
|
||
|
SWP_NOMOVE|SWP_NOZORDER|SWP_NOREDRAW|SWP_NOACTIVATE));
|
||
|
|
||
|
// set focus to first one
|
||
|
m_edit1.SetFocus();
|
||
|
return FALSE; // focus set
|
||
|
}
|
||
|
|
||
|
void CDerEditDlg::OnOK()
|
||
|
{
|
||
|
#ifdef _DEBUG
|
||
|
// dump results, normally you would do something with these
|
||
|
CString s;
|
||
|
m_edit1.GetWindowText(s);
|
||
|
TRACE(_T("edit1 = '%s'\n"), s);
|
||
|
m_edit2.GetWindowText(s);
|
||
|
TRACE(_T("edit2 = '%s'\n"), s);
|
||
|
m_edit3.GetWindowText(s);
|
||
|
TRACE(_T("edit3 = '%s'\n"), s);
|
||
|
m_edit4.GetWindowText(s);
|
||
|
TRACE(_T("edit4 = '%s'\n"), s);
|
||
|
#endif
|
||
|
|
||
|
EndDialog(IDOK);
|
||
|
}
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// Run the test
|
||
|
|
||
|
void CTestWindow::OnTestDerivedEdit()
|
||
|
{
|
||
|
TRACE(_T("running dialog with special derived CParsedEdit controls in it\n"));
|
||
|
CDerEditDlg dlg;
|
||
|
dlg.DoModal();
|
||
|
}
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|