WIN32でダイアログボックスを作成しました。
そこでエディットボックスをつけました。
そのエディットボックス上でキーボードを押した場合にこちらが指定した
文字を表示したいと思っています。
そこで、まずEM_SETLIMITTEXTを使ってエディットボックス自体の入力受付をなくそうとしたのですが、どうやら最低1文字は入力できるようになってしまうようなのです。
何か良い方法はありませんでしょうか?
ちなみに可視状態(灰色状態ではない)で行いたいのです。
ご教授よろしくお願いします。
サブクラス化してWM_CHARを処理する。
それができたら、貼り付けに対応。
ダイアログで EN_UPDATE をハンドリングして、
指定した文字列とは違う文字列に変更されそうだったら
強制的に指定した文字列を設定、というのでもいいですね。
EnableWindow(FALSE) で、色はカスタムドローするとか。
ちなみに、可視状態というと、ShowWindow() の方だと思います。
みなさんレスありがとうございます。
下記のような方法を取ってみたのですが、
switch(LOWORD(wParam))
{
case EN_UPDATE:
SendMessage(hWnd, EM_SETSEL, 0, 1);
SendMessage(hWnd, EM_REPLACESEL, FALSE, (LPARAM)" ");
break;
}
このようにしてクリアしてみたのですが、強制的にずっとこれがループしてしまい、
すぐにアプリケーションが強制終了してしまいました。
RAPTさん
つまりEnableWindowでFALSE状態にしてから色を白色に変えるということですよね?
しかしEnablewindowでFALSE状態にすると選択自体が出来ませんよね?
これはどのようにしたら選択は出来るようになるのでしょうか?
× switch(LOWORD(wParam))
○ switch(HIWORD(wParam))
だから、
> 指定した文字列とは違う文字列に変更されそうだったら
といったのに...
GetWindowText か何かで変更後の文字列を取得して、
書き換えが必要と判断した場合だけ書き換えを行うことになります。
ちなみに, RAPT さんの方法の方が簡単でいいと思います。
使用禁止ではなく ES_READONLY にすれば選択もできます。
レスありがとうございます。
現在ES_READONLYにしてみたのですが、
EN_UPDATEが呼ばれなくなってしまいました。
その他にWM_KEYDOWNとかWM_CHARとか試してみたのですが、
そのメッセージも呼ばれないみたいです。
キー入力があった場合のメッセージって他に何かありますでしょうか?
混乱させてしまったようで、ごめんなさい。
ES_READONLY は、入力を単に無視できればいいのだと思って提案しました。
キーボードが押されたときに何かしたかったのですね。
だったら、最初に提案した方、つまり, ES_READONLY は指定しないで、
EN_UPDATE で変更後文字列を取得→気に入らなかったら書き換え、
というので十分かと思います。
ツイート | ![]() |