-
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
[WIP] ダイアログの位置が表示するたびにずれていく問題を修正 #687
Conversation
rc.left = rcWork.left; | ||
if( rc.left < 0 ){ | ||
rc.right += rc.left; | ||
rc.left = 0; | ||
} |
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.
ワークスペース座標系を考慮した処理に変更しましたが、モニタ1台の構成でしか動作確認していないので、プライマリモニタでないモニタ上でダイアログを閉じた場合の位置復帰がきちんと出来ていないかもしれないです。
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.
PCのスペックに依存しますが、VirtualBoxで複数モニタ(最大8)の環境作れるっす。
ゲストOSは、MSサイトからダウンロードできるので、ご参考。
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.
情報ありがとうございます。後で確認してみます。
Windows10の仮想デスクトップでも問題が無いかの確認も必要ですね。
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.
ワークスペース座標系を考慮した処理に変更しましたが、モニタ1台の構成でしか動作確認していないので、プライマリモニタでないモニタ上でダイアログを閉じた場合の位置復帰がきちんと出来ていないかもしれないです。
想定している手順等あれば、共有していただけますか?
手元にディスプレイ2つの環境があるので動作確認は可能です。
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.
操作手順
に書かれているようにタスクバーの位置を標準の下から左もしくは上に変えて試す必要があります。
なお複数ディスプレイの場合、プライマリモニタでないモニタをどこに配置するのかディスプレイ設定で?変えられると思うので、色々な配置で問題が無いか確認する必要があると思います。
対象となる画面
タイトル | メニュー | 実装クラス |
---|---|---|
ファイル内容比較 | 検索 > ファイル内容比較 | CDlgCompare |
DIFF差分表示 | 検索 > DIFF差分表示 | CDlgDiff |
履歴とお気に入りの管理 | 設定 > 履歴の管理 | CDlgFavorite |
ダイレクトタグジャンプ一覧 | 検索 > タグジャンプ | CDlgTagJumpList |
ウィンドウ一覧 | ウィンドウ > ウィンドウ一覧表示 | CDlgWindowList |
PR ありがとうございます。 変更内容見ましたが、さすがにレベル高けぇな・・・と感じております。 構造としては 気になる点を以下に列挙します。
1点目は指摘です。 reviewコメントはあとでまとめて書きます。 |
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.
指摘箇所4件です。
対応をお願いします。
m_yPos = rc.top; | ||
m_nWidth = rc.right - rc.left; | ||
m_nHeight = rc.bottom - rc.top; | ||
|
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.
メモ: 閉じるタイミングにだけ保存すれば開くときの復元に支障はないのでここで保存するのは無駄、と。
m_yPos = rc.top; | ||
m_nWidth = rc.right - rc.left; | ||
m_nHeight = rc.bottom - rc.top; | ||
|
||
/* サイズボックスの移動 */ | ||
if( NULL != m_hwndSizeBox ){ | ||
::GetClientRect( m_hWnd, &rc ); |
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.
メモ:この呼出しは無意味。WM_SIZE
はクライアント矩形のサイズとともに送信されるから。
return TRUE; | ||
|
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の話題として扱うべきではないが、ここの処理がこれでいいかとうかは結構ビミョー。
https://docs.microsoft.com/en-us/windows/desktop/winmsg/wm-move
BOOL CDlgCompare::OnSize( WPARAM wParam, LPARAM lParam ) | ||
{ | ||
/* 基底クラスメンバ */ | ||
CDialog::OnSize( wParam, lParam ); | ||
|
||
::GetWindowRect( GetHwnd(), &GetDllShareData().m_Common.m_sOthers.m_rcCompareDialog ); | ||
|
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.
メモ:サイズ変更時から閉じる時に処理を移管したので、ここから消えるのは自然。
BOOL CDlgCompare::OnSize( WPARAM wParam, LPARAM lParam ) | ||
{ | ||
/* 基底クラスメンバ */ | ||
CDialog::OnSize( wParam, lParam ); | ||
|
||
::GetWindowRect( GetHwnd(), &GetDllShareData().m_Common.m_sOthers.m_rcCompareDialog ); | ||
|
||
RECT rc; | ||
POINT ptNew; | ||
::GetWindowRect( GetHwnd(), &rc ); |
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.
メモ:無駄なAPI呼出。ON_SIZE
メッセージはクライアント矩形のサイズとともに送られてくる。わざわざGetWIndowRect
して矩形を取りなおす処理の必要性がそもそも疑問。というか、そもそもなんでwindowrectが必要なんだ?というツッコミもある。
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.
ON_SIZE メッセージと書かれてますが正しくは WM_SIZE メッセージですね。
以上重箱の隅をつついてみました。
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.
アンカー処理の実装(CDialog::ResizeItem
)を読まないで適当なコメントを返しますが、GetWindowRect だとノンクライアント領域の分も含んでしまうので、コントロールの位置調整に使うのには適さない気もしますね。まぁでもノンクライアント領域が小さい場合には誤差みたいなものなのかも。。
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.
ON_SIZE メッセージと書かれてますが正しくは WM_SIZE メッセージですね。
きゃーww
ダイアログには一応、枠がついてるので、枠を無視したサイズで子ウインドウの位置調整を行うのは危険です。というか、サイズを渡す意図なのにPOINT構造体使ってるのも気に食わんのです(笑
コメント、いっぱい書いてますけど本筋に関係ないものが多いのでスルーでもいいっすよ。対応が必要なものは「メモ:」って付けてないです。
{ | ||
::GetWindowRect( GetHwnd(), &GetDllShareData().m_Common.m_sOthers.m_rcCompareDialog ); | ||
|
||
return CDialog::OnMove( wParam, lParam ); |
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.
メモ:これが消えたOnMoveの処理。
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.
間違った!指摘4件ですって。
@berryzplus さんレビューありがとうございます。指摘事項に対応しました。 |
WIP状態のものをapproveするわけにはいかんので待ち・・・。 |
週末に複数モニタでの確認を行いますのでお待ちください。 |
自分でdismissできるのに気付いたので change requestを取り下げます。
#719 でコンフリクト発生しました。 |
連絡ありがとうございます。後で着手する際に rebase します。 |
このPRは再着手待ちの認識です。 |
僕はこういうWindowsの仕様に詳しくないので、レビューとか無理案件です。 そもそもこれってこういう認識でいいんでしたっけか 頑張ってください。応援だけしています。 |
Vim でも同じようなバグがありました。vim-jp/issues#181 |
PR作り直します。 |
Issue #397 に対処しました。