EditBoxにテキストを入れると自動的に.が追記される方法 – プログラミング – Home

EditBoxにテキストを入れると自動...
 
通知
すべてクリア

[解決済] EditBoxにテキストを入れると自動的に.が追記される方法


薫
 薫
(@薫)
ゲスト
結合: 21年前
投稿: 19
Topic starter  

■環境■
windows xp
VC 6.0
MFC ダイアログベース

はじめまして。
宜しくお願いします。

エディットボックスに6桁の数値を入力した時
3文字めと6文字めに自動的に.が
入るようにしたく思っています。

例:
123456 → 12.34.56

以下ソース

//エディットボックスをダブルクリックしてonChangeVersion()という関数を作る
//エディットボックスのIDはIDC_VERSION

void CDLfileDlg::OnChangeVersion()
{

int end; //エディットボックス内の文字数

CEdit* pTxt;
pTxt = ( CEdit* )GetDlgItem( IDC_VERSION );

end = pTxt->GetWindowTextLength();

if(end == 2 || end == 5){ //文字数が2か5だったら
pTxt->SetSel(end,end);
pTxt->ReplaceSel(.); //文字列の終端に.が追記される
return;
}
}

現状として、無事に.は入るのですが
BackSpaceを押した時に文字を消すことができなくなりました。

無事に文字もBackSpaceで消えて
尚且つ、3文字めと6文字めには
.を入れたいのですがどうしたらよろしいでしょうか?


引用未解決
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

どのタイミングでピリオドを入れているのか今一わかりませんが、
打鍵時に自動的に入るようにするには、エディットボックスを
サブクラス化すると簡単かもしれません。
  SubclassWindow()について調べてみてください。

サブクラス化したEditをEditSubとすると、打鍵時の
  EditSub::OnChar()
内で文字数を判定し、2文字目(現文字数は1)なら
  Edit::OnChar( nChar, nRepCnt, nFlags); // この文字を入力したあと
  Edit::OnChar( '.' nRepCnt, nFlags);  // ピリオドを入力したことにする
としてみてはどうでしょう。
'\x08' == nChar (つまりBSコード)の場合は上記処理をしないで、
素通しなければなりません。


返信引用
薫
 薫
(@薫)
ゲスト
結合: 21年前
投稿: 19
Topic starter  

仲澤@失業者さん ありがとうございました。

SubclassWindow()について調べた後
上記書き込みを参考にすると
実現することができました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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