• 締切済み

エディットボックスでテキストの最後に入力したい?

エディットボックスで最後の位置に ( が入力されたときに閉じ括弧の ) を出力して () としたいのです が、下のコードだと ( が入ったときに )( となってしまいます。いろいろ試していますが () と出力 できないので、わかる方よろしくお願いします。 int nStartChar, nEndChar; CEdit *edit1 = (CEdit *) GetDlgItem(IDC_EDIT1); if(pMsg->message == WM_CHAR) if(pMsg->wParam == '(') { edit1->GetSel(nStartChar, nEndChar); edit1->SetSel(nStartChar, nEndChar); edit1->ReplaceSel(")"); }

みんなの回答

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

WM_CHARで処理するのはイマイチ正しくないような気がしますが……。 WM_CHARの時点で、対象のウィンドウのテキスト書き換えられた後…だったかなぁ? で、書き換えられた後だったとしても、掲示のコードだと…… "Test"と入力済みのエディトボックスで、カーソルを途中まで移動してから'('を入力した場合にどうなるんでしょうか? >エディットボックスで最後の位置に ( が入力されたときに という条件にはそぐわないと思いますけど。 EN_CHANGEかEN_UPDATEで対処すべき…ではないですかね? EN_UPDATEかな? 通知されるタイイミングが異なりますのでその辺りは確認してみて下さい。 # 私が作ったプログラムで、入力できる数値の範囲を制限しているプログラムではEN_UPDATEで対処してました。

OKWave8888
質問者

お礼

Wr5 さん回答ありがとうございました。 WM_CHAR では通知されるタイミングが合わないことがわかりま した。 EN_UPDATE での方法も考えてみます。とりあえずは、下のように F6 を押したときに () が入るようにしました。 int nStartChar, nEndChar; CEdit *edit1 = (CEdit *) GetDlgItem(IDC_EDIT1); if(pMsg->message==WM_KEYDOWN){ if(pMsg->wParam == VK_F6) { edit1->GetSel(nStartChar, nEndChar); edit1->SetSel(nStartChar, nEndChar); edit1->ReplaceSel("()"); edit1->SetSel(nStartChar-1, nEndChar-1); } }

すると、全ての回答が全文表示されます。

関連するQ&A