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 桁目のすぐ後ろで終了します。
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 桁目で終わる場合は、削除後にコントロールの内容が再フォーマットされません。
誰かがその原因を特定できれば幸いですが、挿入ポイントの問題は明らかに私の主な関心事です。
助けてくれる人に感謝します。できる限り多くの情報と説明を提供しようとしました。何か見落としがあればお知らせください。