初心者です。
http://www.athomejp.com/goldfish/mfc/edit/number.asp
を見て現在数字しか入力できないEditを作成中です。
しかし、どうしても
「m_NEdit.SubclassDlgItem(IDC_EDIT1, this);」のところで、
Debug Asserttion Failedって出てしまいます。
HPに書かれている様にしましたが、最後の
「サブクラス化する際に、ダイアログクラスのヘッダーに、CNumberEditBoxクラスのヘ
ッダーのインクルードと、データメンバに「m_NEdit」を追加してください。」
のところで色々悩んでいます。
ここは、
・クラスウィザードからメンバ変数タブをクリック。
・ダイアログのクラスを選ぶ。
・コントロールIDのIDC_EDIT1を選択する。
・変数の追加ボタン押下する。
・メンバ変数に「m_NEdit」記入
・カテゴリは「コントロール」を選択。
・変数のタイプは「CNumberEditBox」としました。
現在sourceとheaderは、
BOOL CAaaDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// このダイアログ用のアイコンを設定します。フレームワークはアプリケー
ションのメイン
// ウィンドウがダイアログでない時は自動的に設定しません。
SetIcon(m_hIcon, TRUE); // 大きいアイコンを設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンを設定
// TODO: 特別な初期化を行う時はこの場所に追加してください。
m_NEdit.SubclassDlgItem(IDC_EDIT1, this);
return TRUE; // TRUE を返すとコントロールに設定したフォーカスは失われ
ません。
}
/////////////////////////////////////////////////////////////////////////////
// CAaaDlg ダイアログ
class CAaaDlg : public CDialog
{
// 構築
public:
CAaaDlg(CWnd* pParent = NULL); // 標準のコンストラクタ
// ダイアログ データ
//{{AFX_DATA(CAaaDlg)
enum { IDD = IDD_AAA_DIALOG };
CNumberEditBox m_NEdit;
//}}AFX_DATA
// ClassWizard は仮想関数のオーバーライドを生成します。
//{{AFX_VIRTUAL(CAaaDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV のサ
ポート
//}}AFX_VIRTUAL
// インプリメンテーション
protected:
HICON m_hIcon;
// 生成されたメッセージ マップ関数
//{{AFX_MSG(CAaaDlg)
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
となっています。
※ちなみに
m_NEdit.SubclassDlgItem(IDC_EDIT1, this);
をコメントアウトしたらうまくできました。
(なんででしょうか…?)
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200111/01110064.txt
も見ましたが分かりません。
どなたかアドバイスを下さい。
開発環境は、
XP、VC6(SP6)です。
よろしくお願い致します。
たぶんClassWizardで作成すると、m_NEdit.SubclassDlgItem(IDC_EDIT1, this);のよう
な処理は CAaaDlg::DoDataExchangeメソッドのなかで同等な処理が行われているからで
す。(DDX_Control(pDX, IDC_EDIT1, m_NEdit);のとこね)
だから、そこをコメントアウトするか、m_NEdit.SubclassDlgItem(IDC_EDIT1, this);
をコメントアウトするかすれば無事動きます。
>「サブクラス化する際に、ダイアログクラスのヘッダーに、CNumberEditBoxクラスのヘ
>ッダーのインクルードと、データメンバに「m_NEdit」を追加してください。」
そのWebページはClassWizardで追加しないで、手動で追加するのを前提に書かれてい
るものだと思われます。
おお!なるほど~。
DDX_Controlってなんだろうって疑問はありますが、
本当にその通りでした。
ありがとうございます<(_ _)>
なんかすっきりしました。
Blueさん、素早い回答本当にありがとうございました。