電子書籍の厳選無料作品が豊富!

エディットボックスで最後の位置に ( が入力されたときに閉じ括弧の ) を出力して () としたいのです
が、下のコードだと ( が入ったときに )( となってしまいます。いろいろ試していますが () と出力
できないので、わかる方よろしくお願いします。

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(")");
}

A 回答 (1件)

WM_CHARで処理するのはイマイチ正しくないような気がしますが……。



WM_CHARの時点で、対象のウィンドウのテキスト書き換えられた後…だったかなぁ?
で、書き換えられた後だったとしても、掲示のコードだと……
"Test"と入力済みのエディトボックスで、カーソルを途中まで移動してから'('を入力した場合にどうなるんでしょうか?
>エディットボックスで最後の位置に ( が入力されたときに
という条件にはそぐわないと思いますけど。

EN_CHANGEかEN_UPDATEで対処すべき…ではないですかね?
EN_UPDATEかな?
通知されるタイイミングが異なりますのでその辺りは確認してみて下さい。
# 私が作ったプログラムで、入力できる数値の範囲を制限しているプログラムではEN_UPDATEで対処してました。
    • good
    • 0
この回答へのお礼

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);
}
}

お礼日時:2012/12/23 18:10

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