-
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
メニュー項目の高さ計算でマージン分をDPIに合わせて調整 #512
Conversation
beru
commented
Oct 1, 2018
変更前 | 変更後 |
---|---|
「メニューのドロップダウンの右向きの▶が表示されない」問題も解消されてますね。どこで描いているのか分かりませんが…。。 |
AppVeyor が失敗するのでログを見てみると
と最後に出ていました。 |
#514 を登録しました |
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.
LGTMです。
メニューの高さを取得できるAPIがあるはずなのでいずれ差し替えたいと思っています。いまはまず、現行仕様のままHighDPIに対応させるこの変更を入れるのがよいと考えます。
確認ありがとうございます。
これについて検索して調べてみました。 GetSystemMetrics 関数でメニュー関連で取れるのは、
ですがメニューバーの高さだったり、MDIのウィンドウ閉じるボタンの高さだったりと、今回の用途には適さないようです。 他に、SystemParametersInfo 関数に SPI_GETNONCLIENTMETRICS を渡して取得する NONCLIENTMETRICS 構造体のメンバーの lfMenuFont でメニューのフォントを調べてその高さを利用する方法がありますが、それは既に現在の処理方式でした。 将来的にもっと良い方法があればそれに切り替えましょう。オーナードローでメニューを描画しているライブラリは世の中にたくさんあるのでそれらの実装を確認するのが良さそうですね。 では Merge します。もし問題が見つかったら別の PR で対処する事にしましょう。 |
純粋に疑問なんですが、何でオーナードローでメニューを描いているのでしょう。 |
CMenuDrawer.cpp の歴史の始まりです> SAKURA Editor / Code / Commit [r12] Initial revision
initial なのに revised という矛盾はさておき、答えられる人はここにはいないのではないでしょうか。 |
お、全部緑になって通ってますね。確認ありがとうございました。 |
メインの理由はそれで合ってると思います。 表示直前に表示文字列を切り替えるメニュー(ツールバーの表示/非表示など)が結構あるので、オーナードローでなければ実現できない、と考えていた可能性もあります。 windows標準の機構を使うと 区切り線 の描画方法が微妙に違ったりしますので、 |
@k-takata さん
課題整理してて理由見付けました。 sakura/sakura_core/apiwrap/StdApi.h Lines 221 to 228 in 7bf177d
本来の定義 では 最後のメンバ メニューアイコンを描画する機能が実装されたのは windows2000 かららしいので、 |
この PR で上下のマージンの大きさを DPI に合わせる事をしましたが、メニュー項目の高さの計算は小さいアイコンサイズを 現状メニューやツールバー用のアイコンが 16x16ドットのものしか無くて引き延ばして表示もしていないので問題になっていませんが…。 |
メニュー項目の高さ計算でマージン分をDPIに合わせて調整