class CEditImpl : public CWindowImpl<CEditImpl, CEdit> { BEGIN_MSG_MAP(CEditImpl) MSG_WM_CHAR(OnChar) END_MSG_MAP() void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags){ if( ('0'> nChar || nChar > '9' )&& (nChar!=0x08)){ SetMsgHandled(TRUE); } else SetMsgHandled(FALSE); } }; class SetDlg:public CDialogImpl<SetDlg>,public CWinDataExchange<SetDlg> { public: CEditImpl m_editPointLimit; BEGIN_DDX_MAP(SetDlg) DDX_CONTROL(IDC_EDIT_POINTLIMIT,m_editPointLimit) DDX_INT(IDC_EDIT_POINTLIMIT,_nPointLimit) END_DDX_MAP() BEGIN_MSG_MAP(SetDlg) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) COMMAND_ID_HANDLER(IDOK, OnCloseCmd) COMMAND_ID_HANDLER(IDCANCEL, OnCloseCmd) END_MSG_MAP() public: enum{IDD = IDD_SET_DIALOG}; int _nPointLimit; SetDlg(void):_nPointLimit(6){}; ~SetDlg(void); LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { CenterWindow(GetParent()); DoDataExchange(FALSE); m_editPointLimit.SetFocus(); return TRUE; } LRESULT OnCloseCmd(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { EndDialog(wID); DoDataExchange(TRUE); return 0; } }; -----------SetDlg.CPP------------------------------- #include "StdAfx.h" #include "resource.h" #include "SetDlg.h" SetDlg::~SetDlg(void) { }