Editの制限桁数入力されたことを知るには – プログラミング – Home

Editの制限桁数入力されたことを知る...
 
通知
すべてクリア

[解決済] Editの制限桁数入力されたことを知るには


JILL
 JILL
(@JILL)
ゲスト
結合: 14年前
投稿: 18
Topic starter  

WindowsCE5.0/EMbeddedVC++4.0SP4/SDK(MFC未使用)にて開発

 お世話になります。
 複数のEditを配置したダイアログで、Edit毎に制限桁数入力されると
次のEdit,次のEditという具合にEnterキーで確定せずにフォーカスを移したいのですが、
どのようにすればいいのか途方にくれています。

・Editは全部で5つあり、それぞれ指定(制限)桁数が異なります。
・Editの桁数制限方法は設定済みです。
・ダイアログ内には他に複数のプッシュボタン、オプションボタンがあります。

 Enterを押された場合、IDOKのコマンド通知があり、その場合のフォーカスの
あるEditは限定できると思いますが、制限桁数分入力されたことが通知される
もしくはチェックの方法が分かりません。
 具体的な仕様としては、年月日各2桁と7桁項目と1桁項目の入力パラメータ
を数字キー入力だけ有効桁数入力する毎に各項目を入力していき、
最終的に(全部の項目が入力された時点で)Enterキーで確定したい。
というものです。
よろしくお願い致します。


引用未解決
トピックタグ
Kelly
 Kelly
(@Kelly)
ゲスト
結合: 16年前
投稿: 13
 

EM_LIMITTEXTを使って文字数の入力制限を行っていることが前提です。

LRESULT CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND:
// エディットの内容が変化した
if (HIWORD(wParam) == EN_CHANGE)
{
HWND hEdit = (HWND)lParam;
// 現在の入力文字数を取得
int length = GetWindowTextLength(hEdit);
// 入力制限文字数を取得
int limit = SendMessage(hEdit, EM_GETLIMITTEXT, 0, 0);
if (length == limit)
{
// 次のコントロールへ
SendMessage(hDlg, WM_NEXTDLGCTL, 0, 0);
}
return TRUE;
}
break;
}
return FALSE;
}


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

EM_LIMITTEXTしても、特に限界に達したことを報告してもらえないようなので、
WM_COMMANDのEN_CHANGEのタイミングで入力された文字数を取得し、
限界に達しているなら、次のコントロールにフォーカスを移動。
のようにするしかないようですね。

ちなみに、入力された文字数を取得する単一の関数はありません。
おばかな仕様ですよね(笑)。

また、「年月日各2桁」等はデジット数以外にも、範囲の制限が
あるので、サブクラス化して専用コントロール化するのが
良いかもしれません。この場合は当該のコントロールの
WM_CHARタイミングで文字数を制限できる上、親に制限に
達したことを報告できるようにも実装できますよね。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

あちゃGetWindowTextLength()があったか。失礼しました。


返信引用
JILL
 JILL
(@JILL)
ゲスト
結合: 14年前
投稿: 18
Topic starter  

ありがとうございました。
WM_COMMANDのEN_CHANGEのタイミングでつかまえればよいのですね。

Edit以外のコントロールにフォーカスが移ってしまった場合は、
WM_COMMANDでEditの移るべきコントロールにフォーカスをセットすれば
やりたいことができそうです。

改めまして、みなさまありがとうございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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