数字しか入力できないEditについて – プログラミング – Home

数字しか入力できないEditについて
 
通知
すべてクリア

[解決済] 数字しか入力できないEditについて


kokoro
 kokoro
(@kokoro)
ゲスト
結合: 20年前
投稿: 5
Topic starter  

初心者です。

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)です。

よろしくお願い致します。


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

たぶん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で追加しないで、手動で追加するのを前提に書かれてい
るものだと思われます。


返信引用
kokoro
 kokoro
(@kokoro)
ゲスト
結合: 20年前
投稿: 5
Topic starter  

おお!なるほど~。
DDX_Controlってなんだろうって疑問はありますが、
本当にその通りでした。
ありがとうございます<(_ _)>
なんかすっきりしました。

Blueさん、素早い回答本当にありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました