プロが教えるわが家の防犯対策術!

こんばんわ。

エディットボックスをサブクラス化して
入力チェックを行いたいが、
どのMSGでどの様に行ったら良いのでしょうか?

条件
1.数値のみ入力可
2.10~96の時のみ入力可

#条件1と2を満たした数値のみ入力できるようにしたい

サブクラス化、条件1は実装済。
WM_CHAR、EN_KILLFOCUS、
EN_UPDATEなどで
CString csBuf;
GetDlgItem(IDDxxxx)->GetWindowText(csBuf);
と書くと、強制終了。

WM_KILLFOCUSで処理する時の引数は、
次のフォーカスのポインタなので、
利用不可。

なんらかの操作をした時に
親ウィンドウプロシージャで入力チェックしても良いのですが、
出来れば、入力したらすぐチェックしたいです。

環境、MFC、VC++6.0です。
条件2の数値が、1桁ならWM_CHARで簡単にできたのですが・・・

宜しくお願い致します。

A 回答 (1件)

強制終了の原因はSetWindowText() によるエディットの文字列の変更の


無限ループだと思います。

case WM_COMMAND:
 if(HIWORD(wParam) == EN_UPDATE){ //エディットが変更される直前。

  //SetWindowText() による変更を無視させるために GetFocus() も使う。
  if(GetFocus() == hEdit && (HWND)lParam == hEdit){
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

CString csBuf;
GetWindowText(csBuf);

とコーディングすることで、文字列を取得できました。
エディットボックスの入力チェックは
これで無事完了です。

原因は、無限ループの様でした。
よく考えると、サブクラス化したのに、
GetDlgItem(IDCxxx)->GetWindowText(csBuf);
だと、無限ループしちゃいますね。

どうも、ありがとうございました。

お礼日時:2003/03/21 21:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!