紹介と関連情報:
edit control
符号付き 10 進数 ( のようなもの) のみを受け入れる必要があるがあります-12.35
。
経由でこれを実装することにしましたsubclassing
。
ハンドラーはWM_CHAR
うまく機能しているようで、ユーザーが無効なテキストを入力するのを完全に防ぐために、他のいくつかのメッセージを処理する必要があります。そのようなメッセージの 1 つがWM_PASTE
.
これまでのところ、からテキストを適切に取得しclipboard
、コピーされた文字列が実際に 10 進数であるかどうかに応じて、メッセージを破棄または渡すことができました。
編集コントロールの入力は 12 文字に制限されています。これはEM_SETLIMITTEXT
メッセージを介して行われます。
と を使用pure Winapi
しC++
ます。などのライブラリboost
は許可されていません。
問題:
これまでのところ、編集コントロールが空の場合をテストし、コンテンツが無効な場合は貼り付けを破棄しました。ただし、ユーザーはエディット コントロールでテキストの一部を選択し、貼り付けを実行できます。このようなもの (灰色の文字は選択を表します):
編集コントロール内のテキスト: 123 456
78.9
クリップボード テキスト : -1A
貼り付けを許可した場合、結果の文字列は 123-1A78.9 になり、これは無効な形式です。
これは私が助けが必要な部分です:
私の解析では有効な形式が正しく認識されますが、2 つの文字列を 1 つに適切にマージする方法がわからないため、テストできます。
質問:
貼り付けから得られた文字列を適切に形成して、その有効性をテストするにはどうすればよいですか?
私のために有効性テストを実行できる関数はありますか (ロケールを認識している必要があります! )?
注: テキストを自分で解析することは気にしませんが、その必要がないのになぜ「車輪の再発明」をするのでしょうか?
これを解決するための私の努力:
インターネットをブラウジングすると
std::
、文字列を連結/切断/などする多くの関数が見つかりましたが、結果の文字列を形成するという私のニーズを満たすものはないようです。私が見つけた最も近いものはstring:: insert(...)
、それを使用する方法がわかりません。2番目の質問については、 StackOverflow
std:: strtod
の質問をブラウジングして見つけましたが、文字列の有効性を確認するために使用できるようです。また、ロケールも認識しているようですが、それが私が求めているものかどうかはわかりません。
この投稿をできるだけ簡潔にするために、関連するコード スニペットを含むこの質問へのリンクを提供します。
お時間をいただき、ありがとうございました。
さらに情報が必要な場合は、投稿を更新します。
よろしくお願いします。