■環境■
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文字めには
.を入れたいのですがどうしたらよろしいでしょうか?
どのタイミングでピリオドを入れているのか今一わかりませんが、
打鍵時に自動的に入るようにするには、エディットボックスを
サブクラス化すると簡単かもしれません。
SubclassWindow()について調べてみてください。
サブクラス化したEditをEditSubとすると、打鍵時の
EditSub::OnChar()
内で文字数を判定し、2文字目(現文字数は1)なら
Edit::OnChar( nChar, nRepCnt, nFlags); // この文字を入力したあと
Edit::OnChar( '.' nRepCnt, nFlags); // ピリオドを入力したことにする
としてみてはどうでしょう。
'\x08' == nChar (つまりBSコード)の場合は上記処理をしないで、
素通しなければなりません。
仲澤@失業者さん ありがとうございました。
SubclassWindow()について調べた後
上記書き込みを参考にすると
実現することができました。