1

wxWidgets (バージョン 2.8.12) にカスタム ウィジェットを実装しようとしています。基本的には、変更された単一行の wxTextCtrl です。スペースで区切られた 8 桁の 16 進数の 2 つのセットで構成されるテキスト入力を受け取り、コントロールがそのスペースを自動的に処理するようにします。たとえば、ユーザーが 1 ~ 8 を 2 回入力した場合 (スペース バーを押す必要はありません)、結果のテキスト コントロールの内容は次のようになります。

12345678 12345678

ユーザーが最初の '3' の後にカーソルを置き、バックスペースを 3 回押すと、編集時にそのスペースが自動的に調整され、次のようになります。

45678123 45678

基本的に、スペースはユーザーに対して完全に透過的である必要があります。

ほとんどの場合、これで完了です。コードをここに貼り付けるには少し長いので、Gist を次に示します:
https://gist.github.com/036c1a90f77521a8653c

ただし、修正できないバグが 1 つあります。9 桁目を入力すると、自動的にスペースが挿入されますが、カーソルはスペースの直後、9 桁目のすぐ後ろで終了します。

12345678 |1

wxTextCtrl::SetInsertionPoint()使用しようとするすべての試みwxTextCtrl::SetInsertionPointEnd()は成功を収めていないため、誰かが私が間違っていることを指摘できることを期待して、最後の手段としてここに来ました.

このウィジェットのテストを支援するために、ウィジェットを含む非常に簡単で汚いアプリケーションを用意しました:
https://gist.github.com/cf3219eb47e2bfe85b38
または、ここをクリックしてコードを tarball としてダウンロードします:
https://gist. github.com/gists/cf3219eb47e2bfe85b38/download

make実行して、コードを一度にクリーンアップ、コンパイル、実行するだけです。もちろん、コンパイルするには wxWidgets 2.8.12 がインストールされている必要があります。

このウィジェットの他のほとんどすべての側面は、私が望んでいるように正確に機能します。これが機能しないのは、この 1 つの非常に大きな問題だけです。ただし、気になる小さなバグが 1 つあります。大きな問題ではありませんが、いつか修正したいと考えています。

選択範囲を削除しても、文字を削除してもスペースは自動的に処理されますが、削除した選択範囲が 9 桁目で終わる場合は、削除後にコントロールの内容が再フォーマットされません。

誰かがその原因を特定できれば幸いですが、挿入ポイントの問題は明らかに私の主な関心事です。

助けてくれる人に感謝します。できる限り多くの情報と説明を提供しようとしました。何か見落としがあればお知らせください。

4

1 に答える 1

0

一般的に、ネイティブコントロールの入力処理は、プラットフォームによって動作が異なるため、変更するのは困難です。すでにすべて(または少なくとも1つ以上)でコードをテストしたかどうかはわかりませんが、さらに多くの問題が見つかることを完全に期待しています。

自分でやろうとするのでwxMaskedEditはなく、wxWidgets自体への追加の提案を検討することをお勧めします。まだ最終版ではありませんが、すでに暫定版があり、2.8でも動作する可能性があると思います(もちろん、2.9で開発されていますが)。

于 2012-09-23T09:21:11.410 に答える