文書番号: 403856
最終更新日: 1999/03/19
/*** 数値しか入力できないエディットコントロール ***/ class CNumEdit : public CEdit { : afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags); : }; /** 数値しか入力できないようにする処理 **/ void CNumEdit :: OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { // 数値以外のキーが押されたら警告音を鳴らす if( (nChar >= '0' && nChar <= '9') || nChar == VK_BACK ) CEdit::OnChar(nChar, nRepCnt, nFlags); else MessageBeep( -1 ); } /*** サブクラス化の対象となるエディットコントロールがあるダイアログ ***/ class CMyDialog : public CDialog { : CNumEdit myEdit; // サブクラス化エディットコントロール WNDPROC oldEditProc; // 以前の CEdit のコールバック関数を格納する場所 WNDPROC* GetSuperWndProcAddr(); // オーバーライドする : virtual BOOL OnInitDialog(); : }; /** GetSuperWndProcAddr のオーバーライド ***/ WNDPROC* CMyDialog :: GetSuperWndProcAddr( void ) { return &oldEditProc; // これによって CEdit のデフォルトのコールバッ // ク関数が oldEditProc に保存される } /** 実際のサブクラス化 **/ BOOL CMyDialog :: OnInitDialog( void ) { CDialog::OnInitDialog(); // 以下の処理で ID が示すコントロールが自分の派生元のクラスとなる myEdit.SubclassDlgItem(IDC_EDIT1, this); return TRUE; }※ウィンドウをサブクラス化する場合は SubclassDlgItem() ではなく
/*** ダイアログのクラス ***/ CMyDialog : public CDialog { : CNumEdit myEdit; // 派生クラスのオブジェクト : }; /*** DDX 部分 ***/ void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) DDX_Control(pDX, IDC_EDIT1, myEdit); // myEdit の部分は CEdit のオブジ // ェクトであったのを書き換えた //}}AFX_DATA_MAP }
Keywords: KBHOWTO VC10 VC15 VC20 KB403856
Technology: kbAudDeveloper kbvc150 kbVC32bitSearch kbVCsearch