3

紹介と関連情報:

edit control符号付き 10 進数 ( のようなもの) のみを受け入れる必要があるがあります-12.35

経由でこれを実装することにしましたsubclassing

ハンドラーはWM_CHARうまく機能しているようで、ユーザーが無効なテキストを入力するのを完全に防ぐために、他のいくつかのメッセージを処理する必要があります。そのようなメッセージの 1 つがWM_PASTE.

これまでのところ、からテキストを適切に取得しclipboard、コピーされた文字列が実際に 10 進数であるかどうかに応じて、メッセージを破棄または渡すことができました。

編集コントロールの入力は 12 文字に制限されています。これはEM_SETLIMITTEXTメッセージを介して行われます。

と を使用pure WinapiC++ます。などのライブラリboostは許可されていません。

問題:

これまでのところ、編集コントロールが空の場合をテストし、コンテンツが無効な場合は貼り付けを破棄しました。ただし、ユーザーはエディット コントロールでテキストの一部を選択し、貼り付けを実行できます。このようなもの (灰色の文字は選択を表します):

編集コントロール内のテキスト: 123 45678.9

クリップボード テキスト : -1A

貼り付けを許可した場合、結果の文字列は 123-1A78.9 になり、これは無効な形式です。

これは私が助けが必要な部分です:

私の解析では有効な形式が正しく認識されますが、2 つの文字列を 1 つに適切にマージする方法がわからないため、テストできます。

質問:

  1. 貼り付けから得られた文字列を適切に形成して、その有効性をテストするにはどうすればよいですか?

  2. 私のために有効性テストを実行できる関数はありますか (ロケールを認識している必要があります! )?

注: テキストを自分で解析することは気にしませんが、その必要がないのになぜ「車輪の再発明」をするのでしょうか?

これを解決するための私の努力:

  1. インターネットをブラウジングするとstd::、文字列を連結/切断/などする多くの関数が見つかりましたが、結果の文字列を形成するという私のニーズを満たすものはないようです。私が見つけた最も近いものはstring:: insert(...)、それを使用する方法がわかりません。

  2. 2番目の質問については、 StackOverflowstd:: strtodの質問をブラウジングして見つけましたが、文字列の有効性を確認するために使用できるようです。また、ロケールも認識しているようですが、それが私が求めているものかどうかはわかりません。

この投稿をできるだけ簡潔にするために、関連するコード スニペットを含むこの質問へのリンクを提供します。

お時間をいただき、ありがとうございました。

さらに情報が必要な場合は、投稿を更新します。

よろしくお願いします。

4

1 に答える 1