エディットボックスに特定の文字だけ入力させたい – プログラミング – Home

エディットボックスに特定の文字だけ入力...
 
通知
すべてクリア

[解決済] エディットボックスに特定の文字だけ入力させたい


まさ
 まさ
(@まさ)
ゲスト
結合: 24年前
投稿: 1
Topic starter  

はじめて利用させていただきます。
今、ダイアログ形式のプログラムを作っているのですが、エデェットボックスに
16進入力(特定文字0~9、a~f)だけの許可をしたいのですが、どうしてよいか困っています。
ちなみに、ダイアログはAppWizardを使い,MFCで実現したいのですがどなたかご存知ないでしょうか。
よろしくお願いします。


引用未解決
トピックタグ
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

サブクラス化するのでしょうか。


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

下記のURLにサブクラス化の例が出ています。(^^;

http://homepage1.nifty.com/goldfish/mfc/edit/number.html


返信引用
まさ
 まさ
(@まさ)
ゲスト
結合: 25年前
投稿: 64
 

Bunさん、ありがとうございます。試してみました。
が、多分
m_NEdit.SubclassDlgItem( IDC_EDIT1, this);
のサブクラス化しようとするところでデバッカがDebug Asserttion Failed
と言ってきて実行できませんでした。
お教え頂いた、HPのとおりやったのですが。。。


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

まささん こんにちは。

ダイアログベースでしょうか?

ダイアログのOnInitDialog()内で SubclassDlgItem()されていますか?

さっとコードをのせてみますか? f(^^;


返信引用
まさ
 まさ
(@まさ)
ゲスト
結合: 25年前
投稿: 64
 

はい、HP通り、OnInitDialog内でやっているのですが。
ソースコードはこんな感じです。。
もう、サンプルそのまんまなんですが。。

BOOL CTest1Dlg::OnInitDialog()
{
CDialog::OnInitDialog();

// バージョン情報... メニュー項目をシステム メニューへ追加します。
      ・
      ・
      ・

SetIcon(m_hIcon, FALSE); // 小さいアイコンを設定

// TODO: 特別な初期化を行う時はこの場所に追加してください。

m_NEdit.SubclassDlgItem( IDC_EDIT1, this); ★IDC_EDIT1がEDITBOXのIDです

return TRUE; // TRUE を返すとコントロールに設定したフォーカスは失われません。
}

★で、これがVM_CHARハンドラです。

void NumberBox::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
if( nChar == VK_BACK ||
nChar == VK_DELETE ||
nChar == VK_TAB )
// Backspace、Delete、Tabの場合は、
// 既存のハンドラ呼び出し。
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
return;
}

// 0~9以外の場合は、何も行わずに終了。
// 0~9までは、既存のハンドラ呼び出し。
if( !(nChar >= '0' && nChar <= '9'))
{
return;
}
CEdit::OnChar(nChar, nRepCnt, nFlags);
}


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

試しにやってみたらうまく動作しましたが・・・

m_NEditの宣言、定義は大丈夫でしょうか?


返信引用
まさ
 まさ
(@まさ)
ゲスト
結合: 25年前
投稿: 64
 

MFC ClassWizardのメンバ変数で、変数の追加で ID_EDIT1 
にタイプCEdit、メンバm_NEditとしたのですが。
実際にやって頂いてうまく行くとすると、自分の環境がまずいのでしょうか。。
ちなみにOSはWin98 S-Editionですけど。
関係ないですよね~。。


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

>MFC ClassWizardのメンバ変数で、変数の追加で ID_EDIT1 
>にタイプCEdit、メンバm_NEditとしたのですが。

こりゃ、あかんですわ~ん。(^^;
ホームページの通りにやってみてくださいませ。

クラスビューからおおもとのクラスを右クリックし、クラスの新規作成で追加します。
基本クラスのコンボでCEditを選択し、クラス名に CNumberEditBoxを打ち込みます。

ダイアログのメンバに追加します。(ヘッダーファイル内で定義ですね)

CNumberEditBox m_NEdit;

こうすればサブクラスできると思いますよ。

#あらかじめ、もとの変数m_NEditは削除しておいてくださいね。^^


返信引用
まさ
 まさ
(@まさ)
ゲスト
結合: 25年前
投稿: 64
 

ありがとうございます。
出来ました。。

HPの最後の部分の解釈が全然間違っていました。
&サブクラス化の意味が真に理解できていないみたいで。。。
まだまだ、勉強不足でした。

ほんと、助かりました。


返信引用
CdS
 CdS
(@CdS)
ゲスト
結合: 24年前
投稿: 176
 

もう見ないかもしれませんが。

Ctrl+Vでのペーストなどができないんじゃないんでしたっけ?
OnUpdateを使うって方法もあるかと思います。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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