-
Notifications
You must be signed in to change notification settings - Fork 163
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
コンボボックスのサブクラス化処理を簡素化する #1463
コンボボックスのサブクラス化処理を簡素化する #1463
Conversation
コンボボックスに CRecent を SetProp して直に紐づけ、コンボボックスのハンドルをサブクラスプロシージャに付属データとして渡す。 サブクラスプロシージャはコンボボックスのハンドルから GetProp して CRecent を取得する。
✅ Build sakura 1.0.3247 completed (commit 35c43b51b5 by @kasumikagari) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SetComboBoxDeleter メソッドを呼び出す際に GetItemHwnd メソッドを呼び出してコントロールのHWNDを取得して渡している記述が結構有るのが気になりました。GetItemHwnd メソッドを内部で呼び出す SetComboBoxDeleter メソッドのオーバーロードを追加するのはどうでしょうか?
SetComboBoxDeleter は static なのに対して GetItemHwnd は non-static であるためオーバーロードはできません。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
まず、趣旨には賛成です。
このPRによって、少なくとも利用側のコードは簡素化できているように見えました。
逆に、共通コード部分の複雑度が高まったように見えていて、全体把握ができてる自信がないです。
現状でOK/NGを判断できそうにないので、一旦コメントだけ残しておきます。
✅ Build sakura 1.0.3250 completed (commit b6f00d71e7 by @kasumikagari) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
一通り内容を確認して、問題ないかな~という結論に至りました。
先に書いていた「共通関数が複雑になった気がする」の改善点をあげてみたのでご検討ください。
理由があれば対応なしも可だと思います。
そうであれば、その旨コメントを。
✅ Build sakura 1.0.3259 completed (commit 86668e0f33 by @kasumikagari) |
@sakura-editor/sakura-developers |
丁寧なレビューをありがとうございました。 |
PR の目的
#1311 で要望されている機能の実現に向けた関連コードの整理です。
Windows Vista までに導入された API を活用します。
カテゴリ
PR の背景
検索ダイアログ等のコンボボックスに単語削除機能の追加を試みる途中、既存のコンボボックスのサブクラス化処理が幾分古く冗長であることが気になりました。
単語削除を追加すると関連コードがより複雑になるため、先に整理しておくことで以後のレビュー負担が軽減できるかと思います。
PR のメリット
SetComboBoxDeleter
の呼び出し時に構造体を用意する必要がなくなります。PR のデメリット (トレードオフとかあれば)
ないはずです。
仕様・動作説明
GetComboBoxInfo
を使う既存コードでは Edit と ListBox のハンドルを取得するために
WM_CTLCOLOR*
を目的外利用していましたが 、同じ情報がこの関数で取得できるためハックを除去します。SetWindowSubclass
を使う元の
WNDPROC
を保存・リストアするコードが除去できます。SComboBoxItemDeleter
構造体の廃止構造体のメンバが
HWND
とCRecent*
のみになったため、プロシージャの引数(HWND
)とウィンドウプロパティ(CRecent*
)で代替してしまいます。テスト内容
検索ダイアログ等のコンボボックスの既存動作が変更されないことを手動で確認します。
サブクラス化で実現している履歴の削除動作に対して特に確認が必要です。
PR の影響範囲
SetComboBoxDeleter
を使用する各ダイアログに影響しますが、動作は変更しません。関連 issue, PR
#1311
参考資料
後ほど PR 予定の完成形