[ 新規に投稿する ]

フォルダ,メール一覧,メッセージのウィンドウを区切る枠をドラNo.13523
やなぎ さん 25/06/04 18:00 [ コメントを投稿する ]
  Windows 11 Pro (24H2) で 秀丸メール Ver. 7.39 (64bit版)を使用しています。

秀丸メールのフォルダやメール,メッセージペインを区切っている「枠」(スプリッター)をドラッグすると,画面上で秀丸メールの枠の左方向の約1900ピクセル程度のあたりに,スプリッターと同じ大きさの黒い線がゴミとして描画されるようです。

Shiftキーを押しながらスプリッターをドラッグするとこのゴミは描画されません。

また,マルチディスプレイ環境で左右に拡張して使っているときも,右側ディスプレイで秀丸メールを上記のように操作すると,ディスプレイを超えて左側のディスプレイまで影響します。

黒いゴミが描かれた後,他のウィンドウを動かすなどすると,黒いゴミは消えます。

また,Snipping Toolで黒いゴミをキャプチャしようとしましたが,Snipping Toolがキャプチャモード(画面全体がやや暗くなる)になった際に,黒いゴミは消えてしまいます。

使用しているグラフィックボードは,NVIDIA Quadro P620, ディスプレイドライバは,2025/05/12のVer.32.0.15.7324です。
PC本体は,Dell Optiplex 7010 (スモールフォームファクタ)で,PCに元々ついているHDMI,DisplayPortには何も繋げず,上記のフラフィックボードにディスプレイを2台つないでいます。

特に実害があるわけではないのですが,気になるので報告します。

よろしくお願いいたします。
[ ]
RE:13523 フォルダ,メール一覧,メッセージのウィンドウを区No.13524
秀まるお2 さん 25/06/04 19:03 [ コメントを投稿する ]
  こちらで同じグラフィックボードでのテストはできないんですが、たぶんディスプレイドライバー側の問題なんだろうと思います。

一応、秀丸メールではドラッグ中の線はウィンドウの中にのみ描画していて、ウィンドウの外に線が描画されるのは仕組み的におかしいです。なのでWindows側かドライバー側の問題なんだろうと思います。

僕パソコン(IntelのCPU内蔵グラフィック)では再現しないようでした。

対処は無理だと思うので、一応、今後のサポートの参考情報とさせていただきます。
[ ]
RE:13524 フォルダ,メール一覧,メッセージのウィンドウを区No.13525
秀まるお2 さん 25/06/05 08:39 [ コメントを投稿する ]
  テストしてたらメール内容枠タイトルバーをドラッグした後にメール内容枠の中に枠線のゴミが残るケースを見つけてしまいました。これはこれで修正させていただきます。
[ ]
RE:13524 フォルダ,メール一覧,メッセージのウィンドウを区No.13526
やなぎ さん 25/06/05 13:37 [ コメントを投稿する ]
  >僕パソコン(IntelのCPU内蔵グラフィック)では再現しないようでした。

問題のPCで,グラフィックボードを引っこ抜いて内蔵グラフィックに切り替えて同じことをしたら,ゴミは表示されませんでした。

お騒がせしました。ありがとうございました。
[ ]
RE:13526 フォルダ,メール一覧,メッセージのウィンドウを区No.13527
秀まるお2 さん 25/06/05 15:11 [ コメントを投稿する ]
  枠のドラッグ終了後に画面全体を再描画させればいいんだろうと思うので、一応、そういう処理を入れてみます。

画面全体を再描画させる方法はChatGPTに聞いてみてやり方が出てきたんですが、それではうまくいかず、自分なりに改良してうまく動くように出来たかなぁと思います。次のβ版(Version 7.40β1)を今日アップロードするので、もし良かったらお試しお願いします。


void RedrawDesktop() {
    SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, NULL, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
    HWND    hwndDesktop = GetDesktopWindow();
    RedrawWindow( hwndDesktop, NULL, NULL, RDW_INVALIDATE | RDW_ERASE);
    HWND    hwndFind = GetWindow( hwndDesktop, GW_CHILD );
    while( hwndFind != NULL ) {
        RedrawWindow( hwndFind, NULL, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_ALLCHILDREN);
        hwndFind = GetWindow( hwndFind, GW_HWNDNEXT );
    }
}
[ ]

[ 新規に投稿する ]